我有一个这样的类(class):
public class User(){
private String name;
private Integer version ;
//getter & setter
}
hibernate 映射文件是:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="org.model.User" table="User">
<id name="id" column="Id" type="java.lang.Integer">
<generator class="sequence" >
<param name="sequence">SEQ_User</param>
</generator>
</id>
<version name="version" column="version" type="Integer" />
<property name="name" column="Name" type="string" not-null="true" />
</class>
</hibernate-mapping>
当我使用这样的多对一关系时:
public class UserDetail(){
private String tel;
private User user;
// getter & setter
}
这是 UserDetail.hbm.xml 文件:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="org.model.UserDetail" table="User_Detail">
<id name="id" column="Id" type="java.lang.Integer">
<generator class="sequence" >
<param name="sequence">SEQ_User_Detail</param>
</generator>
</id>
<property name="tel" column="tel" type="string" not-null="true" />
<many-to-one name="user" column="user_Id" entity-name="org.model.User" />
</class>
</hibernate-mapping>
当我想保存 UserDetail 时采取此异常(exception):
object references an unsaved transient instance - save the transient instance before flushing
我按以下方式保存 UserDetail 对象:
@Override
public void add(UserDetail entity) {
Session session = getSession();
session.save(entity);
}
我在 UserDetail 中设置 User,如下所示:
entity.setUser(new User(1));
我只知道 UserId,但从不加载用户对象。
最佳答案
在我调试之后,如果我们将版本字段设置为 Null 在 User 中,我会得到异常,但是当我将其设置为零时,问题就解决了
关于java - 以多对一关系归档的版本导致对象引用未保存的 transient 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39687723/