【问题标题】:Getting issue to merge two objects in hibernate using Session.merge() function使用 Session.merge() 函数在休眠中合并两个对象时遇到问题
【发布时间】:2015-06-20 01:46:41
【问题描述】:

我正在尝试使用休眠更新数据库中的单个记录,所以我想合并更新的对象。我有代码来更新对象并返回合并的休眠实体对象,例如,

  protected <T> T updateObject(T o) {
        Session s = getSession();
        @SuppressWarnings("unchecked")
        T mergedObject = (T) s.merge(o);
        s.update(mergedObject);
        return mergedObject;
    }

当我尝试更新多值属性(例如地址列表)时,如果我在列表中添加新地址并调用更新功能,

T mergeObject = (T) s.merge(o); 后,mergeObject 包含空值,交易失败。 我怎样才能正确地做到这一点?

【问题讨论】:

    标签: java hibernate merge


    【解决方案1】:

    如果您的对象是列表,那么您需要遍历列表并分别合并特定实体。虽然你不能只使用字符串。该对象必须是休眠实体。使用休眠实体,您可以这样做。

        T mergedObject = null;
        if(o instanceof List){
            for(Object obj: o){
                  mergedObject = (T) s.merge(obj);
            }
        }else{
            mergedObject = (T) s.merge(o);
        }
    

    【讨论】:

    • 我的对象包含列表和字符串。它的形式类似于,public class User{ private long id;私人字符串用户名;私有 List 模式;私人名称名称;私人布尔活动;私人字符串密码;私有列表 ims;私有列表 地址;私人列表 电子邮件; }
    • 当对象是User(java类)类型时怎么办?
    • 您是否为您提到的其他列表(例如地址、电子邮件)完成了 OneToMany 的映射。
    • 是的。我已经完成了映射,例如 @OneToMany(mappedBy = "user", orphanRemoval = true) private List emails;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2019-12-29
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    • 2020-06-28
    • 1970-01-01
    相关资源
    最近更新 更多