首页 > 解决方案 > JPA - hibernate.use_identifier_rollback 抛出 NullPointerException

问题描述

我有以下Main类,我试图在文件remove()EntityManager使用hibernate.use_identifier_rollback设置为的属性来调用。truepersistence.xml

public class Main {
    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("myUnit");    
        
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
        
        Foo foo= em.find(Foo.class, 2L);
        em.remove(foo);
        Long fooId = foo.getId();
        
        em.getTransaction().commit();
        em.close(); 
    }
}

具有以下属性会在调用NullPointerExceptionem.remove(foo)方法时引发。

<property name="hibernate.use_identifier_rollback" value="true" />

以下是完整的堆栈跟踪:

Exception in thread "main" java.lang.NullPointerException
    at org.hibernate.persister.entity.AbstractEntityPersister.resetIdentifier(AbstractEntityPersister.java:5362)
    at org.hibernate.event.internal.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:164)
    at org.hibernate.event.internal.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:72)
    at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:110)
    at org.hibernate.internal.SessionImpl.fireDelete(SessionImpl.java:877)
    at org.hibernate.internal.SessionImpl.delete(SessionImpl.java:809)
    at org.hibernate.internal.SessionImpl.remove(SessionImpl.java:2714)
    at mock.Main.main(Main.java:20)

以下是我的 Foo 实体:

@Entity
public class Foo {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    private Long id;

    private String name;
    //...
}

这可能是什么原因以及如何解决这个问题?

标签: hibernatejpaidentityentitymanager

解决方案


推荐阅读