我有一個項目設置,其中我已經模塊化一個項目,並將一個模塊打包到一個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