如何在J2EE环境中引导Hibernate entites

时间:2018-02-10 10:37:11

标签: hibernate jpa java-ee

我正在研究Hibernate 5.1和J2ee结构。在这里,我想知道J2EE引导hibernate实体的方式。它如何创建持久化上下文。

以下是我的项目结构。 我有 PersonEntity,一个PersonDao singleTon类和一个名为Person Dao的LoginServlet。

Project Structure

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文件中的类。

由于

1 个答案:

答案 0 :(得分:0)

问题是因为PersonDao是静态的...当你使用依赖注入时不要使用静态。