- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 JPA 2.1,我有这样的东西
public class EntityManagerProducer {
@Produces
@PersistenceContext(unitName="first_PU")
private EntityManager em;
...
如何动态修改 @PersistenceContext(unitName = "somer_PU")
中的 unitName
以使用其他实体管理器?这可能吗?
VERY IMPORTANT UPDATE
我有一个已部署的应用程序,persistence.xml
如下所示:
<persistence-unit name="db1" transaction-type="JTA">
<jta-data-source>java:/jboss/datasources/PostgresDS</jta-data-source>
<properties>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
<property name="hibernate.cache.use_second_level_cache" value="false"/>
<property name="hibernate.jdbc.batch_size" value="50"/>
<property name="hibernate.jdbc.batch_versioned_data" value="true"/>
<property name="hibernate.order_inserts" value="true"/>
<property name="hibernate.order_updates" value="true"/>
<property name="hibernate.generate_statistics" value="true"/>
<property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
<property name="jboss.entity.manager.jndi.name" value="java:app/entitymanager/db1"/>
<property name="jboss.entity.manager.factory.jndi.name" value="java:app/entitymanagerfactory/db1"/>
</properties>
在运行时,可以修改 persistence.xml 并添加另一个持久性单元,但我需要一种方法来获取我需要的实体管理器,方法是传递持久性单元的名称或其他名称,然后将其用于我想要的用途。然后我可以提供持久性单元的另一个名称并获得一个不同的实体管理器。当然,我希望交易过程仍然是容器管理。
最佳答案
相信我,您不想修改现有 PersistenceContext
中的 unitName
。我几乎可以肯定,您想要实现的只是让第二个 EntityManager
指向不同的数据库,对吧?
那么一个自然的方法是:
public class SomeClass {
@PersistenceContext(unitName = "first_PU")
EntityManager firstEntityManager;
@PersistenceContext(unitName = "somer_PU")
EntityManager secondEntityManager;
// ...
}
个人建议
另请注意,使用 EJB 时,您不必为 EntityManager 创建 Producer
方法,只需键入 @PersistenceContext(...)
就够了。
也非常不鼓励以下内容:
@Produces
@PersistenceContext(unitName="first_PU")
private EntityManager em;
因为默认作用域是@Dependent
。 @RequestScoped
或 @TransactionScoped
会好得多。
您可以使用 CDI 和注释限定符代替硬编码的单元名称:
@Inject
private @FirstDB EntityManager firstEntityManager;
@Inject
private @SecondDB EntityManager secondEntityManager;
但是你需要:
@Produces
@RequestScoped // or other
@FirstDB
public EntityManager createEntityManagerA() {
return firstEmf.createEntityManager();
}
@Produces
@RequestScoped // or other
@SecondDB
public EntityManager createEntityManagerB() {
return secondEmf.createEntityManager();
}
有关 CDI 和生成多个 EntityManagers 的大量有用信息,您可以找到 here .
关于jpa - 如何动态修改@PersistenceContext 中的unitName,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33790875/
我有一个看起来像这样的通用 DAO 类: public class GenericDaoJpa implements GenericDao { private final Class typ
当我尝试到达特定端点时,出现异常,提示“无法检索 unitNameparent_module 的 EntityManagerFactory” 但是,由于我在模块上构建了项目,因此出现此错误。当我将所有
这是我第一次尝试实体 bean,我反复收到以下错误: java.lang.IllegalStateException: Unable to retrieve EntityManagerFactory
我正在做一个项目,到目前为止进展顺利,直到我检查了另一个团队的最新更改,以处理最新的文件(不要专注于那个文件)。我正在使用 Tomcat OpenEJB 3.1、JPA 和 Hibernate 3.2
在我的 Eclipse 动态 Web 项目中,我使用 JPA。我已经在 TomEE 服务器下的 tomee.xml 中创建了连接,并且工作正常。我创建了一个 persistence.xml 文件,如下
这是来自堆栈跟踪的(底部)错误: Caused by: java.lang.IllegalStateException: Unable to retrieve EntityManagerFactory
我是 JavaEE 新手,目前正在学习 JavaEE7。我安装了 JavaEE7 并下载了 NetBeans 8.0.2,因此我可以通过此处发布的网络研讨会来关注: https://www.youtu
我需要执行新工作的测试任务,但我似乎处于昏迷状态。我在持久性上下文方面有一些问题。我使用 Glassfish 3 和本教程:http://uaihebert.com/?p=834 jdbc/CrudD
我在这里和网上看到了一些关于此的问题,但它们似乎与我收到的错误消息不太相符。 我一直在我的代码中使用 JPA 注释来处理数据库。我使用@PersistenceContext 注释来配置实体管理器。在我
我正在尝试通过制作项目来学习 JSP 和 servlet。我的目标不是关注 JPA、ORM 和持久性甚至现在是 EJB。所以,请不要告诉我阅读有关它的教程或书籍。不幸的是,我不应该使用 SQL 查询与
我希望有人能帮助我解决一个非常令人沮丧的问题。 我想使用 Arquillian 来测试我正在开发的 Web 应用程序,但我很难尝试让 JPA 测试运行。我是 Arquillian 的新手,我必须承认我
在 Delphi 中,创建 ActiveX 控件曾经比现在更流行。然而,仍然可以使用 Delphi 创建 ActiveX 控件。本题假设Delphi 2007,但无论您使用什么Delphi版本,它都应
我是一名优秀的程序员,十分优秀!