gpt4 book ai didi

java - 注入(inject) hibernate PersistenceUnit

转载 作者:太空宇宙 更新时间:2023-11-04 13:04:53 25 4
gpt4 key购买 nike

通过使用 CDI,如下面的代码所示:

@PersistenceUnit
EntityManagerFactory emf;

我想注入(inject)我的 hibernate EntityManagerFactory

当前如果我执行下一行:

EntityManagerFactory emf = Persistence.createEntityManagerFactory("HibernatePersistanceProv");

它按预期工作,但如果我使用第一种方法执行此操作,它会尝试使用 Derby 连接,我知道这一点,因为我收到下一条错误消息:

org.hibernate.exception.GenericJDBCException: Unable to acquire JDBC Connection

通过堆栈跟踪我知道这是由于此原因引起的。

Error connecting to server localhost on port 1527 with message Connection refused.

我知道这是因为它正在尝试连接到(Java DB)Derby db。

我的 persistance.xml 如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" 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">
<persistence-unit name="HibernatePersistanceProv" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="hibernate.connection.username" value="root"/>
<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/aschema"/>
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
<property name="hibernate.connection.username" value="root"/>
<property name="hibernate.connection.password" value=""/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="false"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/aschema"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
</properties>
</persistence-unit>
</persistence>

我读到显然我需要指定 standalone.xml提供不同的<jta-data-source>但对我来说,它比应有的情况要复杂一些(我不想追错兔子),我已经进入 Java EE 世界一段时间了,所以我认为自己对此是全新的(对于傻瓜的解释受到广泛赞赏)。

(如果有帮助)我正在 GlassFish 4.1 服务器上运行。请询问是否需要任何其他信息。

最佳答案

我认为你的问题与数据库相关,但对于注入(inject) EntityManager 我通常会这样做:

public class EntityManagerFactoryProducer {

@Produces
@ApplicationScoped
public EntityManagerFactory create() {
return Persistence.createEntityManagerFactory("HibernatePersistanceProv");
}

public void destroy(@Disposes EntityManagerFactory factory) {
factory.close();
}

}

public class EntityManagerProducer {

@Inject
private EntityManagerFactory emf;

@Produces
@RequestScoped
public EntityManager create() {
return emf.createEntityManager();
}

public void destroy(@Disposes EntityManager em) {
em.close();
}
}

不仅仅是简单地将它注入(inject)到您想要的任何地方。如果您有更多数据库,请使用限定符与注入(inject)相结合。

@Inject
private EntityManager entityManager;

关于java - 注入(inject) hibernate PersistenceUnit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34585620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com