JPA引用实体:不好的做法是仅引用其键而不是其所有对象

时间:2018-11-08 13:01:18

标签: spring hibernate jpa

假设客户在我们的系统上下订单的情况。因此,为简单起见,我们有2个实体:

DECLARE @string varchar(20)

SET @string = 'Hello World'

SELECT CONVERT(varbinary, @string)

我们有一个REST服务,用于保存/更新客户,还有一个REST服务,用于发布订单。

实际上,在JPA中,Customer - CustomerID - Name Order - Customer - OrderID - OrderValue 实体与Order实体具有ManyToOne关系。因此,假设我没有使用Customer,那么我至少需要调用DTO这样的OrderService

JSON

而且,当我将订单退还给RestClient时,所有{ "customer": { "customer_id": 10 }, "order_id": 40, "order_value": 200.1 } 都将被退回,因为它是在处理过程中加载的。

因此,在考虑有许多“嵌套”实体的复杂系统上,可以接受(或至少不是不好的做法)创建仅引用键而不是对象的实体本身?像这样:

Customer

我是JPA / Hibernate的新手,我来自一个世界,那里的所有实体都是从数据库手动加载的。因此,在处理订单时,我们通常只加载Order - CustomerID - OrderID - OrderValue 而不是所有客户数据。在这里,在此示例中,我认为我有两个选择:加载所有Customer(使用FetchType.EAGER或不加载任何内容(使用FetchType.LAZY)),因此,没有办法(至少我知道)返回到RESTClient一个仅包含其CustomerID的Order对象(至少,无需手动设置order.customer.customer_id,这听起来有点怪异)。

非常感谢!

0 个答案:

没有答案