【问题标题】:The state field path 'e.id' cannot be resolved to a valid type. Dynamic entity in orm.xml,状态字段路径“e.id”无法解析为有效类型。 orm.xml 中的动态实体,
【发布时间】:2015-04-21 04:13:01
【问题描述】:

当我的应用程序尝试访问继承实体 RootFolderNode 时,这个简单的 SINGLE_TABLE 继承层次结构以某种方式失败。

实体被定义为动态实体 access="VIRTUAL",没有 Java 类支持。加载 PersistenceUnit 时没有任何抱怨。

Exception Description: Problem compiling 
    [SELECT DISTINCT e FROM RootFolderNode e WHERE  e.id =  :param1 ]. 
[46, 50] The state field path 'e.id' cannot be resolved to a valid type.

ORM.xml的相关部分

<entity class="FolderNode" access="VIRTUAL" >
    <table name="FOLDER_NODE_PREPARE" />
    <inheritance strategy="SINGLE_TABLE"/>
    <discriminator-value>F</discriminator-value>
    <attributes>
        <id name="id" attribute-type="Long">
            <column name="id" />
            <generated-value strategy="SEQUENCE" generator="FOLDER_NODE_SEQ" />
            <sequence-generator sequence-name="FOLDER_NODE_SEQ" name="FOLDER_NODE_SEQ" allocation-size="1" />
        </id>
        ...
    </attributes>
</entity>

<entity class="RootFolderNode" parent-class="FolderNode" access="VIRTUAL">
    <discriminator-value>R</discriminator-value>
</entity>

我在这里错过了什么?

使用的产品:EclipseLink 2.5.1。 JBoss EAP 6.2。

【问题讨论】:

  • 是的,java.lang.Long。仅使用 Long 适用于其他实体。有什么想法吗?
  • 你能提供一个junit-test吗?
  • 你在使用多租户吗?

标签: jpa orm eclipselink jpql single-table-inheritance


【解决方案1】:

解决方案:重复继承规范:

<entity class="RootFolderNode" parent-class="FolderNode" access="VIRTUAL">
    <inheritance strategy="SINGLE_TABLE"/>
    <discriminator-value>R</discriminator-value>
</entity>

【讨论】:

    【解决方案2】:

    您应该使用继承策略来克服这个问题。请在您的 RootFolderNode 中添加以下行。

     <inheritance strategy="SINGLE_TABLE"/>
    

    【讨论】:

      猜你喜欢
      • 2013-12-02
      • 2015-04-15
      • 2017-08-25
      • 2016-02-26
      • 2014-03-07
      • 1970-01-01
      • 2023-01-02
      • 1970-01-01
      • 2017-02-11
      相关资源
      最近更新 更多