【发布时间】:2018-05-03 13:23:14
【问题描述】:
我在不得不为每个实体对象使用单个 DTO 对象或 DTO 对象时遇到了麻烦。 例如,我有 3 个类:Book、Author 和 Publisher。
Book.java
@Entity
@Table(name = "tbl_book")
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "description")
private String description;
other different fields...
}
Author.java
@Entity
@Table(name = "tbl_author")
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "description")
private String description;
other different fields...
}
Publisher.java
@Entity
@Table(name = "tbl_publisher")
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "description")
private String description;
other different fields...
}
和MyDTO.java
public class MyDTO {
private Long id;
private String description;
constructor id, description...
getters and setters...
}
我只想使用 EntityManager 选择特定字段(id 和描述):
em.createQuery("SELECT NEW MyDTO(id,description) FROM Book");
但我的问题是我应该对所有投影使用单个 DTO 对象(即 MyDTO)吗?比如:
em.createQuery("SELECT NEW MyDTO(id,description) FROM Author");
em.createQuery("SELECT NEW MyDTO(id,description) FROM Publisher");
关于使用 DTO 进行投影的教程只是说使用 DTO 进行读取和使用实体进行写入,但它们并没有说明是否有单个对象 DTO。请您提供一个示例,为什么单个 DTO 或为什么每个实体都使用 DTO。谢谢!
【问题讨论】: