我正在研究Hibernate 5.1和J2ee结构。在这里,我想知道J2EE引导hibernate实体的方式。它如何创建持久化上下文。
以下是我的项目结构。 我有 PersonEntity,一个PersonDao singleTon类和一个名为Person Dao的LoginServlet。
PersonEntity(请忽略setter / getter)
@Entity
@Table(name = "person")
public class PersonEntity {
@Id
private Long id;
@Column(name = "first_name")
private String firstName;
}
PersonDao代码
@PersistenceContext
private EntityManager em;
public EntityManager getEm() {
return em;
}
private static PersonDao personDao;
public static PersonDao getInstance() {
if (personDao == null) {
personDao = new PersonDao();
}
return personDao;
}
private PersonDao() {
System.out.println("manager::" + em);
}
}
LoginServlet
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println(PersonDao.getInstance().getEm());
response.getWriter().append("Served at: ").append(request.getContextPath());
}
Persistence.xml文件。在这里没有提到映射类。
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
version="2.1">
<persistence-unit name="Services">
<description>
Persistence unit for Hibernate User Guide
</description>
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<!-- <mapping-file>file:///etc/opt/app/mappings/orm.xml</mapping-file> -->
<properties>
<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5433/test" />
<property name="javax.persistence.jdbc.user" value="postgres" />
<property name="javax.persistence.jdbc.password" value="postgres" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.hbm2ddl.auto" value="update" />
</properties>
</persistence-unit>
现在我担心的是,每当servlet获取请求时,它都会将entityManage值返回为null。有人可以帮助理解这个bootstrapping是如何工作的。我还需要提到persistence.xml文件中的类。
由于
答案 0 :(得分:0)
问题是因为PersonDao是静态的...当你使用依赖注入时不要使用静态。