论坛首页 Java企业应用论坛

Spring JPA 无法扫描多JAR包中@Entity类的问题

浏览 13489 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2013-08-27  
转载一个问题如下:

Spring JPA 无法扫描多JAR包中@Entity类的问题

问题描述:项目中使用Maven管理,将项目划分为多个子模块,每个子模块中都自己模块的实体类。 在主模块中使用Spring JPA的配置如下:
Java代码  收藏代码
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="dataSource" ref="dataSource"/>  
    <property name="persistenceUnitName" value="persistence"/> 
    <property name="jpaVendorAdapter" ref="hibernateJpaVendorAdapter"/>  
    <property name="jpaProperties"> 
        <props> 
            <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.SingletonEhCacheRegionFactory</prop> 
            <prop key="net.sf.ehcache.configurationResourceName">ehcache/ehcache-hibernate-local.xml</prop> 
            <prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop> 
        </props> 
    </property> 
</bean> 

这样配置会引起一个问题:子模块JAR中实体类不会被扫描。

问题的解决方案如下:
Java代码  收藏代码
1.  删除对应的entityManagerFactory中的属性: 
    <property name="persistenceUnitName" value="persistence"/>; 
2.  增加新的entityManagerFactory属性: 
    <property name="packagesToScan" value="自己的Entity类包名"/> 
3.  删除persistence对应的配置文件; 


----------------------------------End---------------------------------------------------
我配置了下,还是无法解决掉,我的jar包是通过maven依赖引入的。请牛人解决下。
我采用的是spring mvc + spring data jpa(hibernate)的脚手架,一个Web工程,多个java工程,
在Web工程中,只有Controller,每一个Java工程是包含一个entity事体类,dao,service,serviceimpl,
然后通过maven依赖引入到controller,通过@Autowire注解将service的实现注入到Controller,
再在Controller调用service的方法。











   发表时间:2013-08-27  
感觉是你的jar打的问题。
你可以试着在eclipse中导出jar的时候将
Add directory entries 选中 再试试
0 请登录后投票
   发表时间:2013-08-27  
www88485400 写道
感觉是你的jar打的问题。
你可以试着在eclipse中导出jar的时候将
Add directory entries 选中 再试试


maven管理是不需要导出jar的,install下就可以的。
0 请登录后投票
   发表时间:2013-08-29  
两种解决办法:1)在元素persistence-unit下增加:<jar-file>***.jar</jar-file>。该jar文件中包含那些@Entity的类。2)在元素persistence-unit下增加:<class>***.***.EntityClass</class>。在class元素下增加所有的Entity Class的名称,带包名的。
0 请登录后投票
   发表时间:2013-08-30  

<context:annotation-config />
	<bean id="myEmf"
		class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="packagesToScan" value="net.xxxx.ss.model,net.xxxx.ss.model.**.*" />
		<property name="jpaVendorAdapter">
			<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
				<property name="showSql" value="${hibernate.show_sql}" />
				<property name="generateDdl" value="${jpa.generateDdl}" />
				<property name="databasePlatform" value="${persistence.dialect}" />
			</bean>
		</property>
	</bean>



packagesToScan里指定的需要用通配符。取决于你子工程的包声明。

0 请登录后投票
   发表时间:2013-08-30  
ceci.lia 写道
两种解决办法:1)在元素persistence-unit下增加:<jar-file>***.jar</jar-file>。该jar文件中包含那些@Entity的类。2)在元素persistence-unit下增加:<class>***.***.EntityClass</class>。在class元素下增加所有的Entity Class的名称,带包名的。

That's the right solution. You can see it in JPA spec.
0 请登录后投票
   发表时间:2013-08-30  
ceci.lia 写道
两种解决办法:1)在元素persistence-unit下增加:<jar-file>***.jar</jar-file>。该jar文件中包含那些@Entity的类。2)在元素persistence-unit下增加:<class>***.***.EntityClass</class>。在class元素下增加所有的Entity Class的名称,带包名的。


第二种方式果断解决掉了!第一种方式没有试。
---
有没有通配符,不需要根据java工程的entity实体类来写,只需要统一一种包结构?
0 请登录后投票
   发表时间:2013-08-30  
endual 写道
ceci.lia 写道
两种解决办法:1)在元素persistence-unit下增加:<jar-file>***.jar</jar-file>。该jar文件中包含那些@Entity的类。2)在元素persistence-unit下增加:<class>***.***.EntityClass</class>。在class元素下增加所有的Entity Class的名称,带包名的。


第二种方式果断解决掉了!第一种方式没有试。
---
有没有通配符,不需要根据java工程的entity实体类来写,只需要统一一种包结构?
You can't
0 请登录后投票
   发表时间:2013-09-01  
原来我也遇到过相同问题,后来是自己写程序手工添加bean解决的,如果需要可以邮件我bjsq6688@163.com
0 请登录后投票
   发表时间:2013-09-01  
entity声明在persistence.xml里面就可以了啊
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics