加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 为什么hibernate为OneToMany映射生成插入和更新

发布时间:2020-12-15 00:33:48 所属栏目:Java 来源:网络整理
导读:我试图用一个小例子来理解Hibernate中的一对多映射.我的产品有一套Part’s.这是我的实体类: Part.java @Entitypublic class Part { @Id @GeneratedValue int id; String partName; //Setters Getters} Product.java @Entitypublic class Product { private
我试图用一个小例子来理解Hibernate中的一对多映射.我的产品有一套Part’s.这是我的实体类:

Part.java

@Entity
public class Part {
    @Id
    @GeneratedValue
    int id;
    String partName;
    //Setters & Getters
}

Product.java

@Entity
public class Product {
    private String serialNumber;
    private Set<Part> parts = new HashSet<Part>();
    @Id
    public String getSerialNumber() {
        return serialNumber;
    }
    @OneToMany
    @JoinColumn(name = "PRODUCT_ID")
    public Set<Part> getParts() {
        return parts;
    }
    // Setter methods
}

然后我尝试在我的数据库中保存一些部件和产品,并观察下面由hibernate生成的查询:

Hibernate: insert into Product (serialNumber) values (?)
Hibernate: insert into Part (partName,id) values (?,?)
Hibernate: update Part set PRODUCT_ID=? where id=?

这里要在Part表中添加一条记录,hibernate会生成2个DML操作 – 插入和更新.如果单个insert命令足以在表中添加记录,那么为什么hibernate在这种情况下使用insert和update?请解释.

解决方法

我知道这很疯狂,但我有同样的问题,谷歌把我带到了这里,所以在修好后我想我应该发一个答案.

如果你使连接列不可为空且不可更新,Hibernate会将插入/更新方法切换为直接插入,我认为在你的情况下它不是任何方式:

@JoinColumn(name = "PRODUCT_ID",nullable = false,updatable = false)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读