在 Java 中使用 Hibernate 持久化实体时出现问题:会话保存时出现 NullPointerException

问题描述 投票:0回答:1

我在尝试在 Java 应用程序中使用 Hibernate 持久保存实体时遇到问题。我有一个简单的设置,其中实体类使用 JPA 注释进行注释,并配置了 Hibernate 会话工厂。但是,当我尝试使用会话的

save()
方法保存实体时,我始终遇到
NullPointerException
。这是我的代码的简化版本

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class Main {
    private static SessionFactory factory;

    public static void main(String[] args) {
        try {
            factory = new Configuration().configure().buildSessionFactory();
        } catch (Throwable ex) {
            System.err.println("Failed to create session factory: " + ex);
            throw new ExceptionInInitializerError(ex);
        }

        Session session = factory.openSession();
        session.beginTransaction();

        // Create and persist a new entity
        MyEntity entity = new MyEntity();
        entity.setName("Test Entity");
        session.save(entity); // NullPointerException occurs here

        session.getTransaction().commit();
        session.close();
    }
}

这是实体类MyEntity

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class MyEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
}

我已经仔细检查了我的 Hibernate 配置和实体映射,但我似乎无法弄清楚为什么会发生这种情况。任何见解或建议将不胜感激。

    

hibernate jpa
1个回答
0
投票

就您而言,出现问题是因为您在会话关闭后尝试使用该会话。当您在提交事务后调用 session.close() 时,会话将被有效终止,并且对其进行的任何后续操作都将导致 NullPointerException。

要解决此问题,您需要确保在打开的会话范围内执行所有必要的操作。实现此目的的一种方法是将事务块移动到 try-with-resources 语句内,该语句在完成后自动关闭会话:

NullPointerException

}

通过将会话封装在 try-with-resources 块中,您可以确保在不再需要时正确关闭它,从而防止任何潜在的 NullPointerExceptions。确保在 catch 块内正确处理任何异常。

© www.soinside.com 2019 - 2024. All rights reserved.