java - 以多对一关系归档的版本导致对象引用未保存的 transient 实例

标签 java hibernate concurrency orm version

我有一个这样的类(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/

相关文章:

java - Android - 无法解析符号 'FirebaseMessagingService'

hibernate - 简单的 Hibernate aliasToBean() 不起作用

java - 带有 Maven 客户表单 Web 应用程序的 Spring MVC 无法正常工作

java - 在 JPA 查询上设置 ORDER BY 和 LIMIT 子句

multithreading - 我们怎样才能看到 Celery 中的线程呢?

java - 什么时候使用 System.identityhashcode() 和 hashcode() 方法?

java - 尝试以简单的方式从 ListView 中的 Url 检索图像

java - Collectors.joining 与 StringBuilder.append

Java套接字swingWorker正在运行但没有接收或传输消息

haskell - Haskell 中的 "Wait-free"数据