浏览 13533 次
精华帖 (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的方法。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2013-08-27
感觉是你的jar打的问题。
你可以试着在eclipse中导出jar的时候将 Add directory entries 选中 再试试 |
|
返回顶楼 | |
发表时间:2013-08-27
www88485400 写道 感觉是你的jar打的问题。
你可以试着在eclipse中导出jar的时候将 Add directory entries 选中 再试试 maven管理是不需要导出jar的,install下就可以的。 |
|
返回顶楼 | |
发表时间:2013-08-29
两种解决办法:1)在元素persistence-unit下增加:<jar-file>***.jar</jar-file>。该jar文件中包含那些@Entity的类。2)在元素persistence-unit下增加:<class>***.***.EntityClass</class>。在class元素下增加所有的Entity Class的名称,带包名的。
|
|
返回顶楼 | |
发表时间: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里指定的需要用通配符。取决于你子工程的包声明。 |
|
返回顶楼 | |
发表时间: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. |
|
返回顶楼 | |
发表时间: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实体类来写,只需要统一一种包结构? |
|
返回顶楼 | |
发表时间: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实体类来写,只需要统一一种包结构? |
|
返回顶楼 | |
发表时间:2013-09-01
原来我也遇到过相同问题,后来是自己写程序手工添加bean解决的,如果需要可以邮件我bjsq6688@163.com
|
|
返回顶楼 | |
发表时间:2013-09-01
entity声明在persistence.xml里面就可以了啊
|
|
返回顶楼 | |