我在项目中使用hibernate中在实体类里面利用@ManyToOne来进行关联。
但是因为我@ManyToOne中A表关联B表的字段并非ID字段,而是我自己定义的一个code字段。
A表实体类中是这么写的:
@Entity
@Table(name="A")
public class A implements Serializable {
//关联表B,关联字段是bcode,是一个自定义的code字段。
@ManyToOne
@JoinColumn(name="bcode",referencedColumnName="bcode")
private B b;
但是在给A表追加新数据的时候,会提示:object references an unsaved transient instance - save the transient instance before flushing
说白了就是我插入数据的时候表A的实体类中的B实体类处于游离状态无法提交,
这个时候,虽然说可以通过 @ManyToOne(cascade=CascadeType.ALL)这样追加级联属性来解决游离问题。但是随之而然也出现了一个问题。表A的数据插入成功了, 但是表B也跟着插入一条数据。表B的插入数据就是表A中实体类关联的实体类B里面的数据。
我个人猜测是:首先我表A关联的表B的字段并非ID字段,而是我自己定义的CODE字段。但是表B中的ID字段是自动递增。导致了表A在提交数据的时候,A实体类中的B实体类的ID字段就自动递增了。所以导致插入一条新的数据。但是按常理来说我在表A中插入数据的时候不应该对表B进行操作才对。
所以请问如何解决这个问题。
如下图,在给表A追加数据的时候,表B跟着新增了一条数据。termcode就是我关联的字段