hibernate不生成具有特定列的insert语句
我有3个实体相互作用,如下所述hibernate不生成具有特定列的insert语句,hibernate,spring-boot,spring-data-jpa,h2,hibernate-5.x,Hibernate,Spring Boot,Spring Data Jpa,H2,Hibernate 5.x,我有3个实体相互作用,如下所述 Entity_A { @Id private String id; @OneToMany(cascade=CascadeType.ALL, mappedBy="a", orphanRemoval=true) private List<Entity_B> b; @OneToMany(cascadeType.ALL, mappedBy="a", orphanRemoval=true) private List<
Entity_A {
@Id
private String id;
@OneToMany(cascade=CascadeType.ALL, mappedBy="a", orphanRemoval=true)
private List<Entity_B> b;
@OneToMany(cascadeType.ALL, mappedBy="a", orphanRemoval=true)
private List<EntityRelationship_A_B> relationship;
}
@Embeddable
EntityRelationship_A_B_Id {
@Column(name="a_id")
private String a_id;
@Column(name="b_id")
private String b_id;
@Column(name="relationship_id")
private String relationship_id;
}
EntityRelationship_A_B {
@EmbeddedId
private EntityRelationship_A_B_Id id;
@ManyToOne
@JoinColumn(name="a_id", referencedColumn="a_id", insertable=false, updateable=false)
private Entity_A a;
@OneToOne(cascade = CascadeType.ALL, mappedBy="relationship", orphanremoval = true)
private Entity_B b;
}
@Embeddable
Entity_B_Id {
@Column(name="a_id")
private String a_id;
@Column(name="b_id")
private String b_id;
//std methods
}
Entity_B {
@EmbeddedId
private Entity_B_Id id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "a_id", referencedColumn = "a_id", insertable = false, updateable = false)
private Entity_A a;
@OneToOne(fetch = fetchType.LAZY)
@JoinColumn(name = "a_id", referencedColumn="a_id", insertable=false, updateable=false)
@JoinColumn(name="b_id", referencedColumn="b_id", insertable=false, updateable=false)
@JoinColumn(name="relationship_id", referencedColumn="relationship_id", insetable=false, updateable=false)
private EntityRelationship_A_B relationship;
// ....
}
ServiceImpl {
save (...) {
Manually populate and set Entity_B_Id into individual instance_A.instance_B
Manually populate and set EntityRelationship_A_B_Id into individual instance_A.instance_A_B
//...finally save the top level entity...
}
}
实体{
@身份证
私有字符串id;
@OneToMany(cascade=CascadeType.ALL,mappedBy=“a”,orphan=true)
私人名单b;
@OneToMany(cascadeType.ALL,mappedBy=“a”,orphan=true)
私有列表关系;
}
@可嵌入
实体关系{
@列(name=“a_id”)
私有字符串a_id;
@列(name=“b_id”)
私有字符串b_id;
@列(name=“relationship\u id”)
私有字符串关系\u id;
}
实体关系{
@嵌入ID
私人实体关系标识;
@许多酮
@JoinColumn(name=“a\u id”,referencedColumn=“a\u id”,insertable=false,updateable=false)
私人实体;
@OneTONE(cascade=CascadeType.ALL,mappedBy=“relationship”,orphan=true)
私人实体;
}
@可嵌入
实体标识{
@列(name=“a_id”)
私有字符串a_id;
@列(name=“b_id”)
私有字符串b_id;
//标准方法
}
实体{
@嵌入ID
私人实体Id;
@manytone(fetch=FetchType.LAZY)
@JoinColumn(name=“a\u id”,referencedColumn=“a\u id”,insertable=false,updateable=false)
私人实体;
@OneToOne(fetch=fetchType.LAZY)
@JoinColumn(name=“a\u id”,referencedColumn=“a\u id”,insertable=false,updateable=false)
@JoinColumn(name=“b\u id”,referencedColumn=“b\u id”,insertable=false,updateable=false)
@JoinColumn(name=“relationship\u id”,referencedColumn=“relationship\u id”,insetable=false,updateable=false)
私人实体关系;
// ....
}
ServiceImpl{
保存(…){
手动填充实体_B_Id并将其设置为单个实例_A.instance_B
手动填充EntityRelationship_A_B_Id并将其设置到单个实例中
//…最后保存顶级实体。。。
}
}
由于数据的性质,同一实例实体B
不能既与实体A
相关,也与实体B
相关
通过为拥有方实现双向引用,我可以看到EntityRelationship\u A\u B
为A\u id、B\u id、relationship\u id
保存适当的值
但是实体B
对于关系id
总是以null
存储;事实上,Entity\u B
的insert语句根本不包含relationship\u id
列。但是,通过查看运行时值,我可以保证EntityRelationship\u A\u B
引用已正确设置EntityRelationship\u A\u B.Entity\u B
我做错了什么?您使用的是insertable=false,这意味着hibernate将忽略insert语句中的那些属性Show我可以在Entity_B表中填充relationship_id吗?在'id'属性(private Entity_B_id)中设置'a_id'值,因为该实体映射了'a_id',这将在insert/update语句中使用