没有双向实体的Hibernate关系问题

时间:2015-02-12 13:33:39

标签: java spring hibernate

你好,我有一个实体

OfferItem有这两个关系manyToOne

     @ManyToOne
@JoinColumn(name = "offer_id", nullable = false, insertable = false, updatable = false)
@XmlTransient
@Getter
@Setter
private Offer offer;

@ManyToOne
@JoinColumn(name = "item_id", nullable = false, insertable = false, updatable = false)
@XmlTransient
@Getter
@Setter
private Item item;

数据库上的外键配置

             <addForeignKeyConstraint baseTableName="offer_item"
                             baseColumnNames="item_id"
                             constraintName="item_offer_item_fk"
                             referencedTableName="item"
                             onDelete="CASCADE" onUpdate="CASCADE"
                             referencedColumnNames="id"/>

    <addForeignKeyConstraint baseTableName="offer_item"
                             baseColumnNames="offer_id"
                             constraintName="offers_offer_item_fk"
                             onDelete="CASCADE" onUpdate="CASCADE"
                             referencedColumnNames="id"
                             referencedTableName="offer"/>

与offer的关系是bidireccional,因此在Offer实体上我与OfferItem有这种关系

          @OneToMany(orphanRemoval = true, cascade = {CascadeType.ALL})
@JoinColumn(name = "offer_id", nullable = false)
@XmlElementWrapper
@Getter
private List<OfferItem> offerItems = new ArrayList<>();

关于项目我不具备双向关系,因为没有必要。

现在的问题是,当我在OfferItem上创建Item的集合时,我在OfferItems商品列表中添加了offerItem,并且我保存了Offer。我可以看到如何生成offerItem id,因为它是在级联上持久化的。但是,offerItem和item之间的链接丢失了。

我只是尝试在OfferItem上设置项目并使用自己的服务保存实体,但没有。我不能坚持他们之间的这种联系。

任何想法或建议。

问候。

1 个答案:

答案 0 :(得分:1)

从联接列中删除insertable = false, updatable = false。此外,offerItems的映射是错误的。它应该是

@OneToMany(orphanRemoval = true, cascade = {CascadeType.ALL}, mappedBy = "offer")
@XmlElementWrapper
@Getter
private List<OfferItem> offerItems = new ArrayList<>();