首页 文章

Hibernate / JPA简单的创建/删除实体

提问于
浏览
0

我不能在事务中进行简单的创建/删除工作 . 我使用Spring / JPA / Hibernate,没有ehcache .

我的实体类User和MyDao有两个方法标记为Spring的@Transactional(我理解@Transactional应该在服务上,这里只是简化我的情况)

public class MyDao {
      @PersistenceContext
      private EntityManager entityManager;

      @Transactional
      public void create(User user) {
        entityManager.persist(user);
        entityManager.refresh(user);
      }

      @Transactional
      public void delete(User user) {
        // Since user maybe detached, I use Hibernate to delete.
        Session sess = entityManager.unwrap(Session.class);
        sess.delete(user);
      }
    }

我的测试:

{
      User user = new User();
      myDao.create(user);

      // above is ok. user created with generated ID.
      // and I assume the transaction is closed, so user is detached

      myDao.delete(user);

      // above failed with error "Removing a detached instance ..."
    }

根据Hibernate,session.delete()可以删除分离或托管 . 但为什么它失败了?

感谢帮助

迈克尔

1 回答

  • 0

    Hibernate文档表示只有当它覆盖equals()和hashCode()时才能对分离实体进行操作 . 我会在明天回到工作岗位时看看它是否有效 . 我不满意的两件事:

    • 如果先前已分离,则实体必须具有身份字段的值,为什么不使用它?

    • 该文件......

    我们的db表有长列和ID列的字符串,所以我不能使用带有抽象getId()的基本实体类 . 我几乎继续实现一个方法来通过实体类的反射来检索@Id字段,然后是纯JPA,先查找()然后删除 .

    顺便说一句,我说的是应用于我们所有实体的泛型方法,而不仅仅是一个User类 .

相关问题