Hibernate中是否需为复合标识符类OrderLineId创建UI用DTO?
问题:复合标识符类是否需要单独创建DTO?
实体类代码
Order.java
public class Order { private int id; private Set<OrderLine> lines = new HashSet<OrderLine>(); // Setters & Getters }
OrderLine.java
public class OrderLine { private OrderLineId id; private String name; private Order order; // Setters & Getters }
OrderLineId.java
public class OrderLineId implements Serializable{ private int lineId; private int orderId; private int customerId; // Setters & Getters }
Hibernate映射文件
<hibernate-mapping> <class name="Order" table="TEST_Order"> <id name="id" type="int" column="id"> <generator class="native"/> </id> <set name="lines" cascade="all"> <key column="orderId"/> <one-to-many class="OrderLine"/> </set> </class> <class name="OrderLine" table="TEST_OrderLine"> <composite-id name="id" class="OrderLineId"> <key-property name="lineId"/> <key-property name="orderId"/> <key-property name="customerId"/> </composite-id> <property name="name"/> <many-to-one name="order" class="Order" insert="false" update="false"> <column name="orderId"/> </many-to-one> </class> </hibernate-mapping>
问题描述
我已为Order和OrderLine分别创建了DTO,请问是否还需要为上述复合标识符类OrderLineId单独创建DTO?
回答
不是必须要单独创建,核心看你的业务场景和代码规范要求:
- 如果你的OrderLineDTO只需要用到复合ID里的零散字段(比如只取orderId关联其他数据),直接把这些字段拆分到OrderLineDTO里就行,没必要多建一个DTO类。
- 如果业务中经常需要完整传递这个复合ID(比如用它做查询参数、或者多个DTO都要用到这套ID结构),单独创建OrderLineIdDTO会让代码更清晰,也方便复用。
- 要是你要求DTO层和实体层完全解耦,不想让DTO依赖实体类的结构(包括这个复合ID类),那单独做DTO是更规范的选择,能避免后续实体类改动影响到DTO层。
内容的提问来源于stack exchange,提问作者DrunkDragon
相关产品推荐
相关产品推荐

