当前位置: 首页 > 面试题库 >

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

柴泰平
2023-03-14
问题内容

在Session类的JavaDoc中,delete方法的描述为:

从数据存储中删除 持久性实例 。该自变量可以是与接收会话相关联的实例,也可以是具有与现有持久状态相关联的标识符的瞬时实例。

我的问题是:

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

这是一个代码片段:

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;
        }
    });
}

可以吗


问题答案:

或具有与现有持久状态相关联的标识符的临时实例

这意味着您可以直接将传递entitysession.delete(),以删除该对象。此外,您无需检查该实体是否存在。如果在数据库中找不到记录,则应该有一个例外。实际上,我们通常不会真正遇到这种情况。我们总是删除一个现有的实体,我的意思是通常的逻辑就是这样。因此,无需这样做。您可以简单地做到这一点,

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


 类似资料:
  • 如何在一个对象中存储对象和数组?更新一个对象内的对象和数组 const obj={key1:1,key2:2,key3:3,keys:['key1','key2','key3']};我在一次采访中得到了这个问题。现在我想在对象中添加一些新数据。2无论何时添加到对象中,都应在该主对象内的数组中更新“key_”(添加了key number)。 输出应该是这样的(你可以使用任何方法/函数/循环来更新它.

  • 我基本上有一个预订系统,包括预订、员工和客户。 我想保留一个预订实体。预订实体有一个员工(将提供服务)和一个客户(预订是为其发生的)。 我希望能够保留一个预订对象,如果该对象已经存在,则不会在其中创建员工和/或客户。我如何通过JPA和hibernate实现这一点。 我还想保留我现有的模式(预订表、员工表、客户表以及预订客户、预订员工之间的关系表…) 以下是预订实体: 这里是客户实体: 这里是雇员实

  • 问题内容: 当我要求模型管理器获取对象时,如果没有匹配的对象,它将引发。 相反的,我怎么能有可以代替? 问题答案: 没有“内置”方式可以做到这一点。Django每次都会引发DoesNotExist异常。在python中处理此问题的惯用方式是将其包装在try catch中: 我所做的是将models.Manager子类化,创建类似于上面的代码,并将该经理用于我的模型。这样,您可以编写:。

  • 我有一个名为Subject的类,它将存储一些信息,比如主题名称和主题代码,我很难做到,因为我试图让它在arraylist中的记录列表中循环,如果它不存在,则添加新记录。请帮忙,我试着在这里寻找答案,但似乎找不到。 如果循环不是正确的做法,请告诉我正确的方向。谢谢

  • 我创建了用注释的实体,它类似于我的cassandra表。我可以做保存,得到和一切没有太大的问题。 是否有更好的方法动态设置对象映射器操作与访问器和实体的一致性级别? 如果映射对象不存在,如何保存?