在拥有已知主键的同时在Hibernate中保留对象.

fla*_*ama 7 java merge spring hibernate persist

我的问题是分离的对象......

我目前正在使用Spring和Hibernate.

我有一个映射对象,主键作为字符串(我知道它很糟糕......但重构代码需要几个月),我希望坚持下去.(我用两个属性简化了对象)

@Id
private String id;

private String pattern;
Run Code Online (Sandbox Code Playgroud)

所以例如我想添加如下内容:

[ "ID": "myFirstPattern", "图案": "*"]

请注意我的主键已经设置好了.问题在于,每当我尝试持久化时,Hibernate将尝试将此对象与上下文中的任何对象(由于主键)链接,并且将无法执行此操作,因为没有.抛出分离的对象错误.

我做了一些研究并得出结论,merge()足以满足我的需求,因为即使对象不可用它也会持续存在并更新.但是我发现这是一个相当肮脏的解决方法,并想检查是否有任何其他解决方案来解决这个问题.

考虑到我们有一个Helper层,因此Services层不能直接与HibernateDao层一起使用.所以我可以通过添加'persist'和'update'方法来"屏蔽"它,这将调用相同的合并DAO方法.

谢谢,弗拉维奥.

Mau*_*res 1

您尝试过保存或更新吗?

Session sess = factory.openSession();
Transaction tx;
try {
    tx = sess.beginTransaction();
    session.saveOrUpdate( yourObjectHere );

    tx.commit();
}
catch (Exception e) {
    if (tx!=null) tx.rollback();
    throw e;
}
finally {
    sess.close();
}
Run Code Online (Sandbox Code Playgroud)