Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用JPA进行注射?_Java_Eclipse_Jakarta Ee_Jpa_Jpa 2.0 - Fatal编程技术网

Java 如何使用JPA进行注射?

Java 如何使用JPA进行注射?,java,eclipse,jakarta-ee,jpa,jpa-2.0,Java,Eclipse,Jakarta Ee,Jpa,Jpa 2.0,是否可以使用EclipseLink 2.3在EntityManager中进行注射 这是我的persistence.xml文件: <?xml version="1.0" encoding="UTF-8"?> <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schema

是否可以使用EclipseLink 2.3在EntityManager中进行注射

这是我的persistence.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="SuaParte" transaction-type="RESOURCE_LOCAL">
                // classes..
        <properties>
            <property name="eclipselink.jdbc.batch-writing" value="JDBC"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/schema"/>
            <property name="javax.persistence.jdbc.user" value="root"/>
            <property name="javax.persistence.jdbc.password" value="root"/>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
        </properties>
    </persistence-unit>
</persistence>
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="SuaParte" transaction-type="JTA">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <jta-data-source>jdbc/mysql</jta-data-source>
                //classes.. 
    </persistence-unit>
</persistence>
因此,我尝试在数据库中保留一些内容:

@Stateless
@LocalBean
public class DaoUser {
    @PersistenceContext(unitName="SuaParte")
    private EntityManager em;

    public void persist(User user){
        try{
            em.persist(user);
            }catch(Exception e){
            e.printStackTrace();
        }
    }
}
em.persist(user)中返回
java.lang.NullPointerException

我做错了什么?

您必须将事务类型更改为JTA,如下所示-

<persistence-unit name="SuaParte" transaction-type="JTA">
<persistence-unit name="SuaParte" transaction-type="JTA">
    <jta-data-source>JNDI_Name_Of_JDBC_Resource</jta-data-source>
您也可以在
Servlet
ManagedBean
中执行

另外,在您的
Glassfish
服务器上,您可以创建
JDBC连接池
JDBC资源
,给它一个
JNDI名称
,并使用它在
persistence.xml
中声明您的
EntityManager
,如下所示-

<persistence-unit name="SuaParte" transaction-type="JTA">
<persistence-unit name="SuaParte" transaction-type="JTA">
    <jta-data-source>JNDI_Name_Of_JDBC_Resource</jta-data-source>

JNDI\u JDBC\u资源的名称

您可以从Glassfish管理控制台上创建
JDBC资源

BheshG的答案很好,这里只是一些小的补充

  • 我认为,为了激活CDI,从而进行依赖项注入,您需要创建一个空的beans.xml文件,必须将该文件放在项目的WEB-INF文件夹中

  • 要在GF3中创建数据源并通过JNDI(如BheshG SAI)将其公开,您基本上必须做到:

  • resources->JDBC->JDBC连接池并创建连接池

  • 创建将使用该池的数据源

(我想为conenction pool和datasource发布带有示例的图像,但我不能,因为我没有信誉点。为了不显得垃圾和垃圾,我只想说:如果你想要更多细节或示例项目,请发电子邮件给我,因为我现在正在编写关于这方面的教程)

现在,您可以在persistence.xml文件中使用该数据源将其附加到持久化单元:

    <persistence-unit name="emJTA">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <jta-data-source>jdbc/postgre_ds_jta</jta-data-source>
    <mapping-file>META-INF/emp-mappings.xml</mapping-file>
    <class>model.Employee</class>
    <class>model.ProjectManager</class>
    <class>model.Department</class>
    <class>model.Project</class>
    <class>model.Phone</class>
    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
        <property name="hibernate.hbm2ddl.auto" value="update" />
    </properties>       
</persistence-unit>

org.hibernate.ejb.HibernatePersistence
jdbc/postgre\u ds\u jta
META-INF/emp-mappings.xml
模范员工
model.ProjectManager
模范部门
模型项目
型号.电话

使用
@PersistenceContext
时有什么问题?你的问题并不完全清楚。如果您将事务类型更改为
JTA
@BalusC,它在Glassfish中应该可以正常工作,我没有在Glassfish中创建连接池,我不知道我必须这样做。我已经按照Andrei说的做了,但是现在返回一个java.lang.NullPointerException。很可能您缺少CDI工作所需的一些依赖项。没有更多的细节很难说。如果你不想在glassfish中使用JPA2+EJB3+CDI,请在我更新我的帖子上查看我的小项目,你能看看我的新情况吗?谢谢伙计。安德烈,拜托伙计,帮帮我,我不知道你的电子邮件,没有在你的个人资料中找到,我真的需要一些帮助。你能帮我解决我的问题吗?我按照你和Andrei Bodnarescu说的做了,但仍然给出了java.lang.NullPointerException异常,我真的不知道为什么会发生这种情况,我花了两天时间在这个问题上,到目前为止什么都没有,你能帮我吗?