java - Hibernate获取同一个对象到不同的对象

标签 java hibernate

我今天发现了这个问题,但还没有找到任何解决方案,我现在正在学习如何使用 hibernate,所以我会尽力解释一下情况。

我有一个非常简单的类(class):

public class Descripcion {
    private long id;
    private String descripcion;
    private AuxTitularidad titularidad = new AuxTitularidad();
    private AuxTitularidad titularidad2 = new AuxTitularidad();

    //getters and setters below... all of them auto-generated
}

这是我的映射文件

<class name="Descripcion" table="DESCRIPCION">
    <id name="id" type="long" column="id">
        <generator class="identity"></generator>
    </id>
    <property name="descripcion" column="descripcion"/>
    <many-to-one name="titularidad" class="AuxTitularidad" column="id_titularidad1"  />
    <many-to-one name="titularidad2" class="AuxTitularidad" column="id_titularidad2"/>
</class>

这个映射对我有用,没有任何问题,除非“titularidad”和“titularidad2”具有相同的值(引用相同的对象)。发生这种情况时,hibernate 仅获取 AuxTitularidad 类的单个对象并将其用于“titularidad”和“titularidad2”。

如果我只是为了阅读而获取它们,那么这应该不是问题,但我需要使用 HTML 表单进行更新,并且由于“Description”实例持有对“AuxTitularidad”同一实例的两个引用",它只保留一个值。

示例:

数字 1:这些是存储在我的数据库中的值:

 titularidad: 17
 titularidad2: 23

因此,我使用 HTML 表单进行更新,并为它们分配这些新值:

 titularidad: 30
 titularidad2: 28

有效!

数字 2:这些是存储在我的数据库中的值:

 titularidad: 18
 titularidad2: 18

因此,我使用 HTML 表单进行更新,并为它们分配这些新值:

 titularidad: 12
 titularidad2: 32

不起作用。它将其保存在数据库中:

 titularidad: 32
 titularidad2: 32

我已经检查了 HTML 表单中对象的绑定(bind),它是正确的,我确信问题是“titularidad”和“titularidad2”都持有对同一对象的引用(甚至查看了 id)的对象)。 ¿有没有办法告诉hibernate将它们放入单独的对象中? ¿一些配置或参数?

提前致谢!

最佳答案

这是预期的行为。在给定 session 中,给定实体仅存在一次。

如果您想为您的描述实体分配另一个标题,则不应修改现有标题的字段。相反,您应该获取对要分配的 titularidad 的引用,并分配此引用:

Titularidad newTitularidad = session.load(Titularidad.class, newTitularidadId);
Titularidad newTitularidad2 = session.load(Titularidad.class, newTitularidad2Id);
descripcion.setTitularidad(newTitularidad);
descripcion.setTitularidad2(newTitularidad2);

关于java - Hibernate获取同一个对象到不同的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11500310/

相关文章:

java - 如何从字节数组创建文件并将其添加到android中的图库中

java - 执行 .class 文件的方法时如何断言安全?

mysql - GORM withCriteria 返回意外的重复结果

java - 对象属性的 Hibernate 条件/查询

java - 在java类中创建实例

Java switch 语句将变量从一种情况调用到另一种情况

java - Hibernate 自连接多对多与额外列

java - 有什么方法可以继承不是@MappedSuperclass 的实体?

java - 无法初始化代理 - 无 session (Spring-Hibernate-一对一)

java - Android Parcelable 错误数组长度