繁体   English   中英

休眠:更新onetomany列表

[英]Hibernate: Update onetomany list

我在Hibernate中有一个千丝万缕的联系:

@Entity 
public class Project
    @OneToMany(cascade = CascadeType.ALL)
    @OrderColumn(name = "project_index")
    List<Application> applications;


@Entity
public class Application

现在,我尝试直接更新应用程序:

    session.merge(application);

结果是创建了一个新的应用程序,而不是更新实体。 我如何正确地联系我的实体并更新我的实体?

谢谢


解:

@Override
public boolean equals(Object obj)  {
    if (!(obj instanceof Application)) {
        return false; 
    }
    Application app = (Application)obj;

    return id == app.getId();
}

@Override
    public int hashCode () {
        return status.hashCode();
}

当您调用session.merge() ,它返回一个对象,该对象是当前会话上下文中该实体的值。 您不能简单地在新会话中重用现有对象,因为该对象已超出其会话的寿命(并且在新会话中可能已经创建了代表同一实体的新对象)。 您需要通过使用新对象代替旧对象来遵守hibernate的每个实例每个实例一个实例的语义。

如果您发现调用merge()导致创建了新实体(在刷新时生成了一条插入语句),则可能意味着您要合并的对象的标识符不匹配,或者存在问题与您的equals()hashCode()实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM