我正在尝试使用JDO注释定义三个类。 Level3具有两个类型为Level2的嵌入式成员,而Level2具有一个类型为Level1的嵌入式成员。像这样:

@PersistenceCapable
@EmbeddedOnly
public class Level1 {
  @Persistent
  private Long lvl1_;
}

@PersistenceCapable
@EmbeddedOnly
public class Level2 {
  @Persistent
  @Embedded(members = {
    @Persistent(name="lvl1_", columns=@Column(name="lvl1inlvl2_")),
  })
  private Level1 lvl1embedded_;
}

@PersistenceCapable
public class Level3 {
  @Persistent
  @Embedded(members = {
    @Persistent(name="lvl1embedded_",columns=@Column(name="lvl1inlvl3first_")),
  })
  private Level2 lvl2embeddedfirst_;

  @Persistent
  @Embedded(members = {
    @Persistent(name="lvl1embedded_",columns=@Column(name="lvl1inlvl3second_")),
  })
  private Level2 lvl2embeddedsecond_;
}


我正在重命名Level2中Level1的成员和Level3中Level2的成员。
这在Google App Engine中有效,但是尝试运行它时,Tomcat抛出此异常:

Duplicate column name "`LVL1_`" defined for table "`LEVEL3`". You cannot map multiple fields to the same column. The duplicated columns are specified by Level1.lvl1_ and Level1.lvl1_


一种选择是删除类Level1并将代码复制到Level2中,但是我还嵌入了Level1的其他几个类,因此我不想在各处重复使用相同的代码。

我尝试使用点表示法来引用Level3中Level1的成员,但是它不起作用:

@Embedded(members = {
  @Persistent(name="Level1.lvl1_",columns=@Column(name="lvl1inlvl3second_")),
})


增强器会引发如下错误:

Class Level3 has field Level1.lvl1_ declared in MetaData, but this field doesnt exist in the class!


有任何想法吗?谢谢!

PS:顺便说一句,这是我的第一个问题,请客气:)



为了完整起见,按照下面的答案,Level3的XML元数据应该是这样的:

<class name="Level3"
       persistence-modifier="persistence-capable"
       table="LEVEL3">

  <field name="lvl2embeddedfirst_"
         persistence-modifier="persistent">
    <embedded>
      <field name="lvl1embedded" column="level3lvl1embedded">
        <embedded>
          <field name="lvl1_" column="level3lvl1_"/>
        </embedded>
      </field>
    </embedded>
  </field>
</class>

最佳答案

GAE数据存储区(和插件)不检查重复的列(属性)名称(与2个Level2的Level1的字段相同)-这是GAE中的错误。 RDBMS DataNucleus插件(和RDBMS数据存储)确实检查重复的列(并引发异常)。

使用注释,(当前)无法在嵌套的嵌入式对象上指定列替代。但是,您可以使用XML(package.jdo文件)指定列替代。但是始终建议在XML文件中指定ORM特定信息

关于google-app-engine - JDO批注:重命名整个层次结构中几级的列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8463924/

10-10 23:17