我知道有很多关于类似问题的问题,但我没有设法为我的问题提取解决方案。
我正在尝试构建一个提供数据的 RESTful Web 应用程序,该应用程序使用 JPA (EclipseLink 2.4) 提供并在 Glassfish 3.1.2.2 上运行。
为了测试,我在 mysql 中建立了一个留言簿数据库并创建了这个多合一的解决方案:
// imports etc...
// Guestbook class has @Entity
@Stateless
@Path("guestbook")
public class GuestService {
@PersistenceContext
private EntityManager em;
@GET
public Response entry() {
Guestbook entry = em.find(Guestbook.class, someid);
return Response.ok(entry.getMsg()).build();
}
}
这工作得很好,但我想把它分成几个层,像这样:REST -> DAO -> Entity 这将转换为:
@Stateless
@Path("guestbook")
public class GuestService {
private DAO dao;
@GET
public Response entry() {
Guestbook entry = dao.getEntry(someid);
return Response.ok(entry.getMsg()).build();
}
}
// ...
public class DAO {
@PersistenceContext
private EntityManager em;
public Guestbook getEntry(int someid) {
return em.find(Guestbook.class, someid);
}
}
所以这会在 getEntry() 中访问em时产生一个空指针异常,因为它是null。我的 persistence.xml 看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="..." xmlns:xsi="..." xsi:schemaLocation="...">
<persistence-unit name="guestbook" transaction-type="JTA">
<jta-data-source>jdbc/mysqldatasource</jta-data-source>
<class>model.Guestbook</class>
</persistence-unit>
</persistence>
在此先感谢您,我期待您的建议!