2013-12-12 22 views
1

我正在使用JPA和Hibernate构建Roo webapp。我有一个从webapp引用的库项目。在Roo web应用程序具有以下实体:包含从外部jar的类的JPA实体

@RooJpaEntity 
@RooJavaBean 
public class UpdatePolicyHolder { 

    @ElementCollection(targetClass=Policy.class) 
    private List<Policy> policies; 
    private String deviceId; 
    private long timestamp; 

} 

Policy类在外部库中定义,包括作为jar文件。当启动应用程序时,Hibernate抱怨说,它不能确定的Policy类型:

Could not determine type for: com.company.policy.Policy, at table:... 

我似乎无法在网上找到任何有关各地包括外部类的问题。我没有对标准Roo生成的persistence.xml文件进行任何更改。我修改了applicationContext.xml文件,以确保实体和类的包都被组件扫描元素覆盖。

webapp项目打包成一场战争,目前通过mvn jetty:run命令运行。包含Policy的jar包含在Maven依赖项中。

+0

描述您的包装。你的应用是“耳朵”还是“战争”?哪里有'Policy'的罐子,是'persistence.xml'的罐子? – rzymek

+0

@rzymek我上面的编辑应该解决您的问题 –

+0

请向我展示'Policy'类。 – rzymek

回答

0

包含策略的jar必须包含META-INF/persistence.xml以让第三方应用扫描该jar内的实体。

然后设置弹簧EntityManagerFactory扫描持久实体:

<bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" 
    id="entityManagerFactory"> 
    <property name="persistenceUnitName" 
     value="UNIT_NAME_OF_POLICY_PERSISTENCE_XML"/> 
    <property name="dataSource" ref="..."/> 
    <property name="packagesToScan" value="com.company.policy" /> 
... 
</bean> 

问候

+0

那么为什么这不适用于XML映射实体? – kboom

+0

此问题不应影响xml映射的实体 – eruiz