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

标签 java hibernate session

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/

相关文章:

java - 在java中,静态方法返回后对象会发生什么

java - 修改 Oracle Sql 查询返回的结果内容

java - spring 和 hibernate 集成类未找到异常

authentication - 站点如何安全地支持 http(非 SSL) session ?

asp.net - ASP.NET session 对象中的 Entity Framework 对象上下文?

java - 通过 servlet 处理 XMPP 服务器的登录

java - 如何通过 Mockito 对被测类的私有(private)方法进行 stub

java - 高效的性能测量

java - 在Java中生成数百万个不重复的随机数

java - Hibernate 和 Cayenne 的比较