Java 休眠:如果引用不存在,则保存该引用
我有以下课程:Java 休眠:如果引用不存在,则保存该引用,java,hibernate,merge,Java,Hibernate,Merge,我有以下课程: @Entity public class ClassA { @Column @Id private Long id; @ManyToOne(cascade = javax.persistence.CascadeType.ALL) @JoinColumn... private ClassB classB; public ClassA(ClassB classB){ this.classB = classB; } //.... //..
@Entity
public class ClassA {
@Column
@Id
private Long id;
@ManyToOne(cascade = javax.persistence.CascadeType.ALL)
@JoinColumn...
private ClassB classB;
public ClassA(ClassB classB){
this.classB = classB;
}
//....
//....
}
@Entity
public class ClassB {
@Column
@Id
private Long id;
@Column(unique=true) //important
private String name;
public ClassB(String name){
this.name = name;
}
//....
//....
}
仅当ClassB
不存在时,我才想保存ClassA
和ClassB
ClassB b = new ClassB("myName");
ClassA a = new ClassA(b);
session.merge(a); // fine
ClassA a2 = new ClassA(b);
session.merge(a2); // problem with b
当然,我可以检查
ClassB
是否存在并加载它,但我希望这样做更有效。如果存在ClassB并且管理了ClassB,那么getEntityManager.contains(b)返回true
ClassB b = new ClassB("myName");
if(getEntityManager.contains(b)){
ClassA a = new ClassA(b)
session.merge(a);
}
else{
session.merge(b);
ClassA a = new ClassA(b)
session.merge(b);
}
contains(obj)
仅测试对象是否存在于当前会话中,或者是否存在于当前持久性上下文EntityManager中。它不会查询数据库以查看具有该ID的对象是否已经存在。为什么要先保存ClassB。如果保存成功,那么您可以使用ClassB作为参数创建ClassA并保存ClassA。这是我的想法。可能对您有所帮助。我认为这会起作用:ClassB=hibernateSession.merge(新ClassB(“myName”);合并(新的ClassA(b))代码>但它没有。还有其他更好的主意吗?:)