Hri*_*esh 7 spring hibernate jpa
我有一个项目设置,我已经模块化了一个项目,并将一个模块打包成一个jar文件,当我们创建一个战争并部署它时,它包含在主项目中.我面临的问题是,我在模块中存在一个实体,当在启动期间构建unitName的JPA Container EntityManagerFactory时,该实体不会加载.
我有的基本问题是在persistence.xml中没有EntityManager查找,然后加载指定的属性,然后扫描所有包以获取@Entity注释?
任何关于它如何工作的见解以及如何解决这个问题都会很棒.
我找到了这个链接,它提到了创建单独的persistenceUnits,但在这里我不需要一个单独的持久性单元.我只需要模块来重载父项目并加载实体和任何其他@Resource,@ Component类,它由于上下文而执行:组件扫描和注释配置.
http://javathoughts.capesugarbird.com/2009/02/jpa-and-multiple-persistence-units.html
这是我的代码/配置
<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>
Run Code Online (Sandbox Code Playgroud)
定义EnitityManagerFactory以启动实体管理器.
<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" />
Run Code Online (Sandbox Code Playgroud)
....
Persistence.xml,定义二级缓存和其他hibernate属性.
然后,具有实体的模块.
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 {
Run Code Online (Sandbox Code Playgroud)
....}
注意:实体与父项不同,因为它本身就是一个单独的模块.
在主项目中加载正常的实体.
package com.parent.line.entity;
import javax.persistence.Entity;
@Entity
@Table(name = "ACCOUNT")
@Cacheable(true)
public class Account
implements LMLookupTypeEntityByDivision, Serializable, Comparable<Account> {
Run Code Online (Sandbox Code Playgroud)
如果您使用的是 spring boot,请在主 springboot 类中使用实体扫描注释
@EntityScan(
basePackageClasses = {externalpackage.classname.class}
)
Run Code Online (Sandbox Code Playgroud)
要扫描驻留在 jar 中的实体,您必须将其包含在 persistence.xml 中。
<jar-file>packedEntity.jar</jar-file>。
如果你想从包中加载单元,那么你可以尝试直接从 jar 中注入它。
@PersistenceContext(unitName = "../packedEntity.jar#main")
还没有尝试过,但您可以启用实体的休眠自动检测
<property name="hibernate.archive.autodetection" value="class, hbm"/>
| 归档时间: |
|
| 查看次数: |
10701 次 |
| 最近记录: |