Hibernate 如何将EntityManager注入EJB?在这种情况下有什么不对?

Hibernate 如何将EntityManager注入EJB?在这种情况下有什么不对?,hibernate,jpa,ejb,Hibernate,Jpa,Ejb,我正在尝试在Glassfish服务器上运行一个web应用程序。当我的DAO像这样编码时,我的测试页面上没有问题。我可以找到所有的客户,并在数据表上看到他们 @Stateful public class CustomersDao { static EntityManagerFactory emf; static EntityManager em; public List<Customers> getAllCustomers() { emf

我正在尝试在Glassfish服务器上运行一个web应用程序。当我的DAO像这样编码时,我的测试页面上没有问题。我可以找到所有的客户,并在数据表上看到他们

@Stateful
public class CustomersDao {

    static EntityManagerFactory emf;
    static EntityManager em;

    public List<Customers> getAllCustomers() {

        emf = Persistence.createEntityManagerFactory("Persistence");
        em = emf.createEntityManager();

        TypedQuery<Customers> query = em.createQuery("SELECT c FROM Customers c", Customers.class);

        List<Customers> allCustomers = query.getResultList();

        System.out.println(allCustomers);
        System.out.println(allCustomers.get(0).getCountry());

        return allCustomers;
    }
}
@Stateful
公共类CustomersDao{
静态实体管理器工厂emf;
静态实体管理器;
公共列表getAllCustomers(){
emf=Persistence.createEntityManagerFactory(“Persistence”);
em=emf.createEntityManager();
TypedQuery query=em.createQuery(“从客户c中选择c”,客户.class);
List allCustomers=query.getResultList();
System.out.println(所有客户);
System.out.println(allCustomers.get(0.getCountry());
退回所有客户;
}
}
但是,当我将类更改为:

@Stateful
public class CustomersDao {

    @PersistenceContext(unitName = "Persistence")
    EntityManager em;

    public List<Customers> getAllCustomers() {


        TypedQuery<Customers> query = em.createQuery("SELECT c FROM Customers c", Customers.class);

        List<Customers> allCustomers = query.getResultList();

        System.out.println(allCustomers);
        System.out.println(allCustomers.get(0).getCountry());

        return allCustomers;
    }

}
@Stateful
公共类CustomersDao{
@PersistenceContext(unitName=“Persistence”)
实体管理器;
公共列表getAllCustomers(){
TypedQuery query=em.createQuery(“从客户c中选择c”,客户.class);
List allCustomers=query.getResultList();
System.out.println(所有客户);
System.out.println(allCustomers.get(0.getCountry());
退回所有客户;
}
}
我得到:javax.persistence.PersistenceException:[PersistenceUnit:persistence]无法构建EntityManagerFactory

|准备应用程序时出现异常:[PersistenceUnit:Persistence]无法生成EntityManagerFactory org.hibernate.HibernateException:未设置“hibernate.dial”时,连接不能为空

这是我的persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
    <persistence-unit name="Persistence">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <class>com.tugay.maythirty.model.Customers</class>
        <properties>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/sampleapplication"/>
            <property name="javax.persistence.jdbc.user" value="root"/>
            <property name="javax.persistence.jdbc.password" value="passsssss"/>
        </properties>
    </persistence-unit>
</persistence>

org.hibernate.ejb.HibernatePersistence
com.tugay.maythero.model.Customers
有什么帮助吗?

在第一个代码段中,使用了应用程序管理的实体管理器。当您使用
@PersistenceContext
注入实体管理器时,这将是一个容器管理的实体管理器,它需要一个JTA数据源。因此,您应该在Glassfish服务器中创建一个名为
myJtaDataSource
的数据源,然后您的
persistence.xml
应该如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
    <persistence-unit name="Persistence">
        <jta-data-source>myJtaDataSource</jta-data-source>
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <class>com.tugay.maythirty.model.Customers</class>
    </persistence-unit>
</persistence>

myJtaDataSource
org.hibernate.ejb.HibernatePersistence
com.tugay.maythero.model.Customers
请看下面使用Glassfish创建数据源的步骤:

谢谢您的回答!如果我将所有内容都保留在标记中,它们是否被覆盖?如何使用Tomcat服务器实现这一点?jdbc/classicmodels com.tugay.maythero.model.Customers