gpt4 book ai didi

java - Hibernate Session.delete() 一个对象(如果存在)

转载 作者:太空狗 更新时间:2023-10-29 22:37:12 25 4
gpt4 key购买 nike

Session类的JavaDoc中delete的描述方法是:

Remove a persistent instance from the datastore. The argument may be an instance associated with the receiving Session or a transient instance with an identifier associated with existing persistent state.

我的问题是:

  1. 我想删除一个分离对象,我可以用这个方法吗,AFAIK session 首先使一个对象从分离中持久化,然后执行它的操作。我对吗?
  2. 如果我不确定数据库中的对象是否存在,我应该使用 Session.get() 来检查它是否为空,然后执行删除操作,还是可以直接使用删除操作?

这是一个代码片段:

public void removeUnallocatedUserIfExits(final long itemId) {
getHibernateTemplate().execute(new HibernateCallback() {

public Object doInHibernate(Session session) throws HibernateException, SQLException {
session.flush();
session.setCacheMode(CacheMode.IGNORE);
UnallocatedUser unallocatedUser;
if ((unallocatedUser = (UnallocatedUser) session.get(UnallocatedUser.class, itemId)) != null) {
session.delete(unallocatedUser);
}
session.flush();
return null;
}
});
}

没事吧?

最佳答案

or a transient instance with an identifier associated with existing persistent state

这意味着您可以直接将您的 entity 传递给 session.delete(),以删除该对象。此外,您无需检查实体是否存在。如果在数据库中没有找到记录,应该有一个异常(exception)。事实上,我们通常不会真正得到这种情况。我们总是删除一个现有的实体,我的意思是通常的逻辑是这样的;所以,没有必要这样做。你可以这样做,

SomeEntity ent = session.load(SomeEntity.class, '1234');
session.delete(ent);

或者你可以这样做,

SomeEntity ent = new SomeEntity('1234'); // used constructor for brevity
session.delete(ent);

顺便说一句,你也可以使用这个版本session.delete(String query),

sess.delete("from Employee e where e.id = '1234'"); // Just found it is deprecated

关于java - Hibernate Session.delete() 一个对象(如果存在),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5776098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com