实体对象获得持久化时的空指针异常

时间:2014-12-04 11:14:54

标签: java session jpa ejb stateless-session-bean

我正在尝试将实体对象存储到数据库中。但我的问题是当实体对象被持久化时,它会抛出空指针异常。

以下是我的实体类

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

}

下面是我发现的空指针错误的屏幕截图。 (玻璃鱼日志)

enter image description here

正如您在上图中看到的,当调用create方法时,抛出了null ponter异常。我猜这个异常是从entitymanager抛出的。我从一个没有显示代码的servlet调用create方法。

我不熟悉使用JPA,ejb和会话bean,因此不太清楚错误。如果您想查看更多程序代码以修复错误,请在下面发表评论。

感谢您的时间。

编辑:

以下是persistence.xml文件的屏幕截图

enter image description here

persistence.xml文件的源视图

enter image description here

1 个答案:

答案 0 :(得分:0)

似乎缩短了BookFaçade类,#create(...)方法不在第36行。

我猜你的NullPointerException是对EntityManager的访问。也许您的问题类似于this one。这与您的环境(哪个应用程序服务器,哪个规范版本)有关。

尝试注入EntityManagerFactory而不是EntityManager。然后在#create(...)方法中本地创建您的EntityManager(来自emf)。上面的链接有一个例子。