DTOとBeanとEntityの違いとは、即答できず…現場でよくある疑問を整理!

2025年5月13日

とてぃです。最近仕事で「DTOとBean、Entityって何が違うの?」と聞かれて即答できず、復習を兼ねてまとめてみました。
現場でよく使う用語ですが、意外と説明があいまいになりがちなので、整理しておくと後輩や初心者に聞かれたときも安心です。

DTOとは

DTO(Data Transfer Object)は、異なるシステムや層(レイヤー)間でデータをやりとりするためのオブジェクトです。
主にWebアプリケーションやAPI開発で、コントローラやサービス層、DBアクセス層との間でデータを受け渡す「」の役割を果たします。

  • SQLから取得したデータや、リクエスト・レスポンスのデータ構造を一時的に格納
  • 基本的にgetter/setterのみを持つシンプルなクラスが多い
  • バリデーションやビジネスロジックは原則持たない(データの運搬専用)
  • EntityやFormなど他のオブジェクト間の変換にも使われる

Web開発をしていれば、知らずにDTOを使っていることが多いです。

Beanとは

Java Beanは、JSPやサーブレット、SpringなどのフレームワークでデータをやりとりするためのJavaオブジェクトです。
画面(JSP)項目やフォームの値を一時的に保持したり、セッションやリクエストスコープで使われます。

  • JavaBeansの仕様(publicな引数なしコンストラクタ、getter/setter、シリアライズ可能)を満たす
  • JSPやEL式(${user.name}など)で簡単にプロパティ参照が可能
  • SpringやJSFなど多くのフレームワークで「Bean」として管理される
  • DTOやEntityも広義にはBeanの一種(設計・命名の違い)

Beanも実は、知らず知らずのうちに使っていることが多いです。

Entityとは

Entityは、データベースのテーブルと1対1で対応する永続化用のオブジェクトです。
JPAやHibernateなどのORMフレームワークで、DBのレコードをJavaオブジェクトとして扱う際に利用されます。

  • DBテーブルの1行(レコード)を表現するクラス
  • クラス名とテーブル名、プロパティ名とカラム名が対応することが多い
  • 永続化(保存・更新・削除)やDBアクセスのためのアノテーション(@Entityなど)が付与される
  • 業務ロジックや画面表示用のプロパティは原則持たない(DB構造に忠実)

Entityは「DBとJava間のデータやりとり専用のBean」と考えると分かりやすいです。

DTO・Bean・Entityの違いまとめ

項目 DTO Bean Entity
主な用途 データ転送(層・システム間) 画面やフレームワークとのデータやりとり DBテーブルのデータ保持・永続化
仕様 getter/setterのみ、ロジックなし JavaBeans仕様(getter/setter、引数なしコンストラクタ、Serializable) DB構造に忠実、@Entity等のアノテーション
利用シーン API、サービス層、データ変換 JSP、Spring、JSFなどのフレームワーク JPA/HibernateなどORM、DBアクセス層
ライフサイクル 一時的なデータ運搬 スコープ管理(セッション、リクエスト等) 永続化(DBとの同期)
バリデーション 原則なし 場合によっては持つことも DB制約やアノテーションによる

※現場によっては「DTO」「Bean」「Entity」を厳密に区別せず使っていることも多いですが、「何のためのクラスか」を意識して設計・命名すると、認識ズレが減ります。

よくある類似用語もチェック

  • POJO(Plain Old Java Object):特別な制約のない、ただのJavaクラス。DTOやEntity、BeanもPOJOの一種。
  • VO(Value Object):値のまとまりを表す不変クラス(イミュータブル)。主に識別子や属性値の集合を表現。
  • Form:画面のフォーム入力値を保持するBean。DTOやEntityとは用途が異なる。

まとめ

DTO・Bean・Entityは現場でよく使うけど、意外と説明が難しい用語です。
初心者や後輩に聞かれても困らないように、違いを整理して覚えておくと安心ですね。

  • DTOは「データ転送専用の箱」
  • Beanは「画面やフレームワークと連携するJavaオブジェクト」
  • Entityは「DBテーブルと1対1で対応する永続化用クラス」
  • 現場やプロジェクトでの命名・設計ルールも確認しよう

最後まで読んでいただきありがとうございました。

日常

Posted by xxoruioxx