我正在尝试将实体对象存储到数据库中。但我的问题是当实体对象被持久化时,它会抛出空指针异常。
以下是我的实体类
@Entity
@Table(name = "BOOK")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Book.findAll", query = "SELECT b FROM Book b"),
@NamedQuery(name = "Book.findByBookid", query = "SELECT b FROM Book b WHERE b.bookid = :bookid"),
@NamedQuery(name = "Book.findByBookname", query = "SELECT b FROM Book b WHERE b.bookname = :bookname"),
@NamedQuery(name = "Book.findByBookdesc", query = "SELECT b FROM Book b WHERE b.bookdesc = :bookdesc"),
@NamedQuery(name = "Book.findByBookprice", query = "SELECT b FROM Book b WHERE b.bookprice = :bookprice"), })
public class Book implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 5)
@Column(name = "BOOKID")
private String bookid;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 200)
@Column(name = "BOOKNAME")
private String bookname;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 200)
@Column(name = "BOOKDESC")
private String bookdesc;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 200)
@Column(name = "BOOKPRICE")
private String bookprice;
......其余的方法
在下面的代码中,它承诺执行事务,但随后它会抛出空指针异常错误。
@Stateless
public class BookFacade extends AbstractFacade<Book> implements BookFacadeLocal {
@PersistenceContext(unitName = "BookStore-ejbPU")
private EntityManager em;
@Override
protected EntityManager getEntityManager() {
return em;
}
public BookFacade() {
super(Book.class);
}
@Override
public void create(Book book)
{
em.getTransaction().begin();
em.persist(book);
em.getTransaction().commit();
}
}
下面是我发现的空指针错误的屏幕截图。 (玻璃鱼日志)
正如您在上图中看到的,当调用create方法时,抛出了null ponter异常。我猜这个异常是从entitymanager抛出的。我从一个没有显示代码的servlet调用create方法。
我不熟悉使用JPA,ejb和会话bean,因此不太清楚错误。如果您想查看更多程序代码以修复错误,请在下面发表评论。
感谢您的时间。
编辑:
以下是persistence.xml文件的屏幕截图
persistence.xml文件的源视图
答案 0 :(得分:0)
似乎缩短了BookFaçade类,#create(...)方法不在第36行。
我猜你的NullPointerException是对EntityManager的访问。也许您的问题类似于this one。这与您的环境(哪个应用程序服务器,哪个规范版本)有关。
尝试注入EntityManagerFactory而不是EntityManager。然后在#create(...)方法中本地创建您的EntityManager(来自emf)。上面的链接有一个例子。