Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa 如何实施沃恩·弗农&x27;DDD中关于聚合中引用的建议_Jpa_Domain Driven Design_Spring Data Jpa - Fatal编程技术网

Jpa 如何实施沃恩·弗农&x27;DDD中关于聚合中引用的建议

Jpa 如何实施沃恩·弗农&x27;DDD中关于聚合中引用的建议,jpa,domain-driven-design,spring-data-jpa,Jpa,Domain Driven Design,Spring Data Jpa,遵循DDD中关于骨料中参考文献的沃恩·弗农建议 让聚合通过ID(标识)引用其他聚合,而不是聚合本身 如何用JPA和Hibernate4.3.11.Final来完成这一点 我尝试使用: 差不多 @Entity public class OrdenItem implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @ManyTo

遵循DDD中关于骨料中参考文献的沃恩·弗农建议

让聚合通过ID(标识)引用其他聚合,而不是聚合本身

如何用JPA和Hibernate4.3.11.Final来完成这一点

我尝试使用:

差不多

@Entity
public class OrdenItem implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne(targetEntity = Orden.class, optional = false)
    private Long ordenId;

    @ManyToOne(targetEntity = Product.class, optional = false)
    private Long productId;
    .
    .
    .
但是当我试图用Spring数据检索某个实例时

@Query("" 
        + " SELECT b " 
        + " FROM  OrdenItem b "
        )
List<OrdenItem> findByYYYY();
但我想按照沃恩·弗农的建议去做

@ManyToOne(targetEntity = Product.class, optional = false)
并将orderId和productId作为数字保留在表中

@Column(name="PRODUCT_ID")
就这样

如果您想获取订单及其项目,然后获取字符串表示,您需要产品名称,我认为您需要从中检索每个订单项目的产品。 请允许我说,沃恩会这么做: 首先,我根本不需要通过OrderItem的标识符orderId保存OrderItem到Order的引用,这样您就可以安全地删除它。从域服务中,您所要做的只是检索order aggregate根及其聚合项集合。我不会让每个项目都包含productId,而是将其更改为使每个orderItem包含我产品的另一个概念标识,它必须是产品SKU或其他东西,并且您可以保留其名称,就像它是真实世界中的订单一样。无论如何,这些值根本不会改变,是不变的


塞巴斯蒂安。

一段长的关系不是关系,而是结束。JPA不支持,也可能永远不会支持使用任意的Long来表示某种实体类型的对象。坏主意,不是O-O。在长条上指定多个选项是完全错误的。谢谢你,尼尔,但是请在沃恩·弗农的推荐中给我你的反馈。我同意你的观点,感谢你推荐从ordeitem中删除orderid,我认为orderitem应该是一个值对象而不是实体。我将保留产品Id和sku副本以及产品的其他数据。你知道JPA是否有可能在没有@manytoone anotation的情况下自动生成外键?只要忘记外键,你甚至可以忘记持有productId,并且通过产品SKU仍然拥有概念标识,因此没有外键
@Column(name="PRODUCT_ID")