Hibernate:CascadeType.ALL应该尝试创建对象(如果它尚不存在)

时间:2017-07-19 09:11:05

标签: java mysql hibernate

我有两个A和B类

class A{

    @ManyToOne(cascade=CascadeType.ALL)
    B b;

    // other stuff
}

在B班

class B{

    @Id
    @Column(unique = true, nullable = false)
    private Integer id;

    // other stuff
}

每当创建A的新对象时,我想创建对象B(如果它尚不存在)。但是,如果它已经存在,那么我不想创建它。在这种情况下,我只想在A表中引用已存在的B对象。现在,当我尝试这样做时,我得到了这个例外

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '10' for key 'PRIMARY'

这似乎是一项标准任务,但我似乎无法在stackoverflow等上找到任何解决方案。有人可以帮助。谢谢!!

编辑:为了进行保存,我使用了Sring JPA存储库。我有A和B的存储库接口,最终扩展CrudReposioty并使用其保存功能。以下是org.springframework.data.repository.CrudRepository

中的函数
/**
 * Saves a given entity. Use the returned instance for further operations as the save operation might have changed the
 * entity instance completely.
 * 
 * @param entity
 * @return the saved entity
 */
<S extends T> S save(S entity);

1 个答案:

答案 0 :(得分:2)

在将对象A插入数据库之前,需要设置对象B的id。在这种情况下,如果B不存在,B将被插入数据库。