【问题标题】:Eclipselink: ObjectArrayMapping and ClassDescriptorEclipselink:ObjectArrayMapping 和 ClassDescriptor
【发布时间】:2011-03-31 13:58:25
【问题描述】:

我尝试使用 DescriptorCustomizer 创建 ObjectArrayMapping:

公共类 MyDescriptorCustomizer 实现 DescriptorCustomizer {
公共无效自定义(ClassDescriptor 描述符)抛出异常 {
// 将类描述符设置为聚合集合。
描述符.descriptorIsAggregateCollection();
// 删除我的属性的旧映射(默认):
descriptor.removeMappingForAttributeName("attributeName");
// 创建新的 ObjectArrayMapping:
ObjectArrayMapping arrayMapping = new ObjectArrayMapping(); // 设置属性。
arrayMapping.setReferenceClass(MyClass.class);
arrayMapping.setAttributeName("attributeName");
arrayMapping.setFieldName("fieldName");
arrayMapping.setStructureName("结构名");
// 添加映射到描述符。
描述符.addMapping(arrayMapping);
}
}

问题如下:ObjectArrayMapping 要求 Class Descriptor 是一个 AggregateCollection,这就是我为我的描述符设置此属性的原因。
但在此之后,属于 DirectToFieldMapping 类型的所有其他映射(对于其他字段)都将丢失,因为它们需要正常的描述符。
您有什么想法可以避免这个问题吗?任何帮助将不胜感激。
如果您需要实体代码或其他东西,我可以添加它。 谢谢。

【问题讨论】:

    标签: java jpa eclipselink


    【解决方案1】:

    ObjectArrayMapping 要求目标描述符是聚合的(不是聚合集合),但更具体地要求它映射一个结构,而不是一个表。

    您似乎正在制作源描述符聚合集合,这是错误的,您需要制作目标聚合(即 Embeddable,因此只需将其映射为 JPA 中的 @Embeddable)。您还需要定义一个 DescriptorCustomizer 来设置 structureName 和 fieldOrdering。

    或者如果使用 2.3 你可以使用@Struct注解和@Array注解来定义ObjectArrayMapping,你应该不需要任何定制器。

    http://wiki.eclipse.org/EclipseLink/Examples/JPA/PLSQLStoredFunction

    【讨论】:

      猜你喜欢
      • 2023-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-25
      • 2011-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多