【问题标题】:Flush Order One To Many Unidirectional Mapping刷新订单一对多单向映射
【发布时间】:2019-06-23 12:47:11
【问题描述】:

我有一个“Item”类作为父类和“ItemSizeCost”类作为子类的一对多映射。

我在父类中添加了@OneToMany@JoinColumn

当我尝试持久化父级时,我看到 hibernate 发出三个 sql 语句

insert into item (category_id, description, name) values (?, ?, ?)
insert into item_size_cost (cost, item_id, size_id) values (?, ?, ?)
update item_size_cost set item_id=? where id=?

我想了解最后两个语句背后的原因(插入子项和更新子项)。经过一番谷歌搜索,我发现原因可能与休眠的刷新顺序有关,但不能完全理解。任何人都有任何好的链接来了解 Hibernate 的刷新顺序吗?任何解释将不胜感激。我在下面提到我的课程 -

Item -


    @Entity
@Table(name="item")
public class Item {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="id")
    private int id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="category_id")
    private Category category;

    @Column(name="name")
    private String name;

    @Column(name="description")
    private String description;


    @OneToMany(fetch = FetchType.LAZY, 
            cascade= {CascadeType.PERSIST,CascadeType.MERGE,CascadeType.REMOVE})
    @JoinColumn(name="item_id")
    List<ItemSizeCost> itemSizeCostList;

    .....
}

ItemSizeCost - 

   @Entity
@Table(name="item_size_cost")
public class ItemSizeCost {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="id")
    private int id;

    @ManyToOne(fetch = FetchType.LAZY)
    /*@JoinColumn(name="item_id")*/
    private Item item;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="size_id")
    private Size size;

    @Column(name="cost")
    private double cost;
        ....
}

【问题讨论】:

    标签: hibernate jpa persistence


    【解决方案1】:

    最后两个语句的原因是双向映射以及外键可以为空的事实。

    Vlad Mihalcea 有一篇关于这个主题的优秀文章。他是 Hibernate 提交者:https://vladmihalcea.com/merge-entity-collections-jpa-hibernate/

    【讨论】:

    • 您好,感谢您的回复。我的问题与单向 OneToMany 映射有关。此外,当我说我做了一些谷歌搜索时,这就是我所指的文章 - vladmihalcea.com/…。他在 OneToMany 部分提到了“休眠的刷新顺序”,但我仍然无法理解整个流程。
    猜你喜欢
    • 1970-01-01
    • 2011-04-24
    • 2022-01-03
    • 2012-06-22
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多