Java Hibernate:CascadeType.ALL应该尝试创建对象,如果它没有';不存在

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不存在,我都要创建它。但是,如果它已经存在,那么我不想创

我有两个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时,它抛出异常异常异常是什么?