public class Instructor{
@OnetoOne(cascade=CascadeType.Persist)
@JoinColumn(name="instructor_detail")
public InstructorDetail detail;
}
strategy是strategy = GenerationType.IDENTITY,两个数据库都是mysql 当我为这两个类创建2个瞬态实体并在Instructor中设置InstructorDetail并使用session.save(instructor)时。
我收到错误消息“对象引用了一个未保存的瞬态实例-在刷新之前保存该瞬态实例:”,但是当我使用session.persist(instructor)时,两个实体都保存到db了吗?
保存和保留到CascadeType的区别是什么?
答案 0 :(得分:0)
您可以在Hibernate Session的Java API文档中找到该信息:
/**
* Make a transient instance persistent. This operation cascades to associated
* instances if the association is mapped with {@code cascade="persist"}
* <p/>
* The semantics of this method are defined by JSR-220.
*
* @param object a transient instance to be made persistent
*/
void persist(Object object);
所以此方法有效,因为您已定义@OnetoOne(cascade = CascadeType.Persist)
/**
* Persist the given transient instance, first assigning a generated identifier. (Or
* using the current value of the identifier property if the <tt>assigned</tt>
* generator is used.) This operation cascades to associated instances if the
* association is mapped with {@code cascade="save-update"}
*
* @param object a transient instance of a persistent class
*
* @return the generated identifier
*/
Serializable save(Object object);
因此,要使其正常工作,必须添加级联保存更新 但是:save-update是特定于Hibernate的,而不是JPA。因此,您不应使用保存。
最好不要使用Hibernate Session,而应使用JPA EntityManager。