我有一个Java7/Spring3.2.17应用程序,它必须连接到两个不同的数据库,因此我有两个不同的persistence.xml文件,每个文件都声明自己的持久性单元。
<bean id="emf1" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="myDatasource1" />
<property name="persistenceXmlLocation" value="classpath:META-INF/persistence1.xml" />
<property name="persistenceUnitName" value="pu1" />
...
</bean>
在我的DAO类中,我只是让Spring注入实体管理器:
@PersistenceContext
private EntityManager entityManager;
public void setEntityManager (...) { ... }
Spring抱怨我有两个EM工厂,所以它不知道该用哪一个:
NouniqueBeanDefinitionException:未定义[javax.persistence.EntityManagerFactory]类型的合格bean:应为单个匹配bean,但找到2:emf1,emf2
@PersistenceContext(unitName = "pu1")
private EntityManager entityManager;
public void setEntityManager (...) { ... }
我尝试了几个选项,但所有这些选项都导致相同的错误消息:
public class MyDao extends TheDaoThatICannotModify {
@Override
@PersistenceContext(unitName = "pu2")
public void setEntityManager (EntityManager em) {
super.setEntityManager(em);
}
}
<bean id="entityManager2" factory-bean="emf2" factory-method="getObject" />
<bean id="myDao" class="com.foo.TheDaoThatICannotModify">
<property name="entityManager" ref="entityManager2" />
</bean>
将primary=“true”
属性添加到我的EMF2
bean(将primary=“false”
添加到EMF1
)。
我把它弄好了...通过只在我自己的类中使用Spring injection,并自己将EM传递给邪恶的DAO:
public class MyDaoSingletonFactoryIsh {
@PersistenceContext(unitName = "pu2")
private EntityManager em; // Injected by Spring
private static TheDaoThatICannotModify dao = null;
public TheDaoThatICannotModify getDAO() {
if (dao == null) {
dao = new TheDaoThatICannotModify();
dao.setEntityManager(em);
}
return dao;
}
}
我不知道如何称呼这个模式:工厂,单例,包装器?它并不真正适合这些类别中的任何一个,它是它们的一个奇怪的组合。这可能不是一个好兆头,它看起来像一个巨大的代码气味,我更愿意避免它。但至少它起作用了,所以,没有更好的解决方案...
问题内容: 我在META-INF /文件夹中有一个persistence.xml: 在Java代码中,我从该persistence.xml创建实体管理器facotry 但是我只想动态更改jdbc url / user / password以进行测试,我的计划是将这些参数保存在配置文件中,并根据需要读取它们,所以有没有一种方法可以在我从持久性创建了objectmanagerfactory之后更新它们
问题内容: 一个很长的问题,请忍受我。 我们将Spring + JPA用于Web应用程序。我的团队在讨论如何在注入的(基于泛型的东西对AppFuse中提供的线DAO,我们不使用过的注射某种原因)。我们正在使用“应用程序管理的持久性”。 反对注入a的论点是它太重了,因此不是必需的,这就是我们需要的。而且,由于Spring将为每个Web请求创建一个DAO的新实例(我对此表示怀疑),因此不会有任何并发
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd“> 但面对这个例外: 任何帮助都将不胜感激...
编辑:堆栈跟踪如下: 下面是persistence.xml:
问题内容: 我为Django模型创建了一个自定义管理器,该管理器返回一个包含Objects.all()子集的QuerySet。我需要将其作为模型的默认管理器,因为我还将创建一个自定义标签,该标签将从任何模型(由参数指定)中检索内容,并且需要对指定模型使用默认管理器。一切正常,除了- Django Admin还使用此特定模型的默认管理器,这意味着并非所有模型实例都出现在admin中。 Django文
但问题是这将只锁定一行,而我想在计算总行数时锁定整个表(实体)。 请指教。