我有一个项目设置,其中我已经模块化一个项目,并将一个模块打包到一个jar文件中,当我们创建一个war并部署它时,它将包含在主项目中。 我面临的问题是,我有一个实体存在于模块中,该模块在启动期间构建unitName的JPA Container EntityManagerFactory时未加载。从外部Jar文件加载JPA实体
我所拥有的基本问题是在persistence.xml中不执行EntityManager查找,然后加载指定的属性,然后扫描@Entity注释的所有包?
任何有关如何工作,以及如何解决这个问题的意见将是伟大的。
我发现这个链接,它提到了创建独立的persistenceUnits,但在这里我不需要一个单独的持久单元。我只需要模块捎带父项目并加载实体和其他@Resource,@Component类,由于上下文:组件扫描和注释配置。
http://javathoughts.capesugarbird.com/2009/02/jpa-and-multiple-persistence-units.html
这里是我的代码/配置EnitityManagerFactory的
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="persistenceUnitName" value="LineManagement" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="generateDdl" value="false" />
<property name="showSql" value="false" />
<property name="databasePlatform" ref="cpsHibernateDialectClassName" />
</bean>
</property>
<property name="beanName" value="entityManager"></property>
</bean>
定义启动实体管理器。
<persistence-unit name="LineManagement" transaction-type="RESOURCE_LOCAL">
<properties>
<property name="hibernate.id.new_generator_mappings" value="true" />
<property name="hibernate.current_session_context_class" value="thread" />
<property name="hibernate.default_batch_fetch_size" value="200" />
....
的persistence.xml限定第二级高速缓存和其它休眠特性。
然后,该模块具有一个实体。
import javax.persistence.Entity;
@Entity
@Table(name = IntegrationEvent.TABLE_NAME, uniqueConstraints = @UniqueConstraint(columnNames = "INTGRTN_EVNT_QUEUE_SK"))
@GenericGenerator(name = "UUID_GEN", strategy = "org.hibernate.id.UUIDHexGenerator", parameters = { @Parameter(name = "separator", value = "-") })
public class IntegrationEvent implements Serializable {
.... }
注:该实体是在不同的包比亲本,因为它是在其自己的一个单独的模块。
在主项目中加载正常的实体。
package com.parent.line.entity;
import javax.persistence.Entity;
@Entity
@Table(name = "ACCOUNT")
@Cacheable(true)
public class Account
implements LMLookupTypeEntityByDivision, Serializable, Comparable<Account> {
问题是因为我将模块作为依赖添加到我的父项目中,因为它完全分离。因此它会放在我的WEB-INF/lib文件夹中。在调试加载实体的JPA代码后,我意识到它开始扫描@Entity注释的类路径来自WEB-INF/classes。这是有道理的,因为lib是只读的。现在,我不得不考虑在classes文件夹中添加模块,或者在persistence.xml中使用标记,以便使jar实体能够被扫描和加载 –
Hrishikesh
2012-03-01 17:57:20