java - Hibernate:如果引用不存在,则保存引用

标签 java hibernate merge

我有以下类(class):

@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);
     }

关于java - Hibernate:如果引用不存在,则保存引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12412689/

相关文章:

java - 搜索数组列表,从数组列表中删除项目,将其添加到其他地方

java - Hibernate Validator 注释不适用于 spring mvc

r - 如何合并具有相同列名的数据框

iOS 核心数据合并策略 - NSMergeByPropertyStoreTrumpMergePolicy

java - 将自己的类设置为 java Hashmap 中的键

java - 如何使用查询从数据库中获取数据 - Service Builder

java - Mysql表不存在/JPA注解

java - 为什么要使用 Hibernate 映射组件?

sorting - 从行已排序的 n x m 数组中按升序打印数字

java - gradle generate jar具有资源文件,但运行jar会导致无效资源