Java Hibernate:CascadeType.ALL应该尝试创建对象,如果它没有';不存在
我有两个A班和B班Java Hibernate:CascadeType.ALL应该尝试创建对象,如果它没有';不存在,java,mysql,hibernate,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不存在,我都要创建它。但是,如果它已经存在,那么我不想创
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不存在,我都要创建它。但是,如果它已经存在,那么我不想创建它。在这种情况下,我只希望引用已经存在的B对象的A表中。现在,当我尝试这样做时,我得到了这个例外
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '10' for key 'PRIMARY'
这似乎是一项标准任务,但我似乎找不到任何解决stackoverflow等问题的方法。请有人帮忙。谢谢
编辑:我使用Sring JPA存储库进行保存。我为A和B提供了存储库接口,它们最终扩展了crudeposioty
,并使用了其保存功能。下面是来自org.springframework.data.repository.crudepository
/**
* 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);
/**
*保存给定的实体。将返回的实例用于进一步的操作,因为保存操作可能会更改
*完整的实体实例。
*
*@param实体
*@返回保存的实体
*/
S save(S实体);
在将对象A插入数据库之前,需要设置对象B的id。在这种情况下,如果B不存在,B将被插入数据库。在将对象A插入数据库之前,需要设置对象B的id。在这种情况下,如果B不存在,B将被插入数据库。添加执行保存/更新并导致异常的方法。您可以将B中的Id设置为生成的值吗?@MaciejKowalski将提供该Id,因此生成的不会有帮助。我想这与Spring数据JPA和Hibernate的关系更大。在保存它们时,如何创建A和B?它可能与添加执行保存/更新并导致异常的方法有关。您可以将B中的Id设置为生成值吗?@MaciejKowalski将提供Id,因此生成的Id没有帮助。我想这与Spring数据JPA和Hibernate的关系更大。在保存它们时,如何创建A和B?它可能是相关的,我确实设置了id,你提到的案例工作正常。当数据库中存在B时,它抛出异常异常异常是什么?我确实设置了id,并且您提到的案例工作正常。当数据库中存在B时,它抛出异常异常异常是什么?