【问题标题】:JPA entity containing a class from an external jar包含来自外部 jar 的类的 JPA 实体
【发布时间】:2013-12-12 23:14:21
【问题描述】:

我正在使用 JPA 和 Hibernate 构建一个 Roo webapp。我有一个从 webapp 引用的库项目。 Roo webapp 具有以下实体:

@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 文件以确保实体和 Policy 类的包都被组件扫描元素覆盖。

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

【问题讨论】:

  • 描述您的包装。你的应用是ear 还是warPolicy 的罐子在哪里,jarpersistence.xml 的罐子在哪里?
  • @rzymek 我上面的编辑应该解决你的问题
  • 请给我看Policy类。

标签: java spring hibernate jpa spring-roo


【解决方案1】:

包含 Policy 的 jar 必须包含 META-INF/persistence.xml 以让第 3 方应用程序扫描该 jar 中的实体。

然后设置 Spring 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>

问候

【讨论】:

  • 那么为什么这不适用于 xml 映射的实体?
  • 此问题不应影响 xml 映射的实体
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-30
  • 1970-01-01
  • 2021-12-21
  • 1970-01-01
  • 1970-01-01
  • 2018-11-15
  • 1970-01-01
相关资源
最近更新 更多