1

我在 hyperjaxb 中阅读了有关 fetchtype 的链接从外观上看,似乎只能将 a 添加simpleType fetch-typexsd文件中,然后将fetch属性添加到每个complexType.

有人将如何自定义以下xsd片段,以便下面底部生成的 java 方法具有fetchtype=lazy注释?

<xs:complexType name="SomeTypeName">
    <xs:sequence>
        <xs:element name="title" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element name="someCode1" type="Code" minOccurs="0"/>
        <xs:element name="someCode2" type="Code" minOccurs="0"/>
        <xs:element name="someCode3" type="Code" minOccurs="0"/>
        <xs:element name="someCode4" type="Code" minOccurs="0"/>
        <xs:element name="someCode5" type="Code" minOccurs="0"/>
    </xs:sequence>
</xs:complexType>

<xs:complexType name="Code">
    <!--<xs:sequence>elements with nested data types omitted for simplicity</xs:sequence>-->
    <xs:attribute name="code" type="xs:string" use="optional"></xs:attribute>
    <xs:attribute name="Name" type="xs:string" use="optional"></xs:attribute>
</xs:complexType>

这是应该说 fetchtype=lazy 的 Java 属性:

@ManyToOne(targetEntity = Code.class, cascade = {
    CascadeType.ALL
})
@JoinColumn(name = "SOME_CODE1_P_0")
public Code getSomeCode1() {
    return someCode1;
}

此外,如何具体(即使用什么特定语法)fetchtype在所有方法中设置全局默认值,以便只需要覆盖某些属性?

4

1 回答 1

2

请参阅与cascade先前询问的示例类似的问题:

在 hyperjaxb 中自定义休眠属性

并检查使用JPA ORM 模式的 Hyperjaxb自定义模式:

这将导致类似:

<jaxb:bindings schemaLocation="schema.xsd" node="/xs:schema">
    <hj:persistence>
        <hj:default-many-to-one fetch="LAZY">
            <!-- ... -->
        </hj:default-many-to-one>
    </hj:persistence>
</jaxb:bindings>

如果你想要fetch="LAZY"所有的关联,你还必须自定义default-one-to-one, default-one-to-many, default-many-to-many。这些自定义将全局应用(“默认映射”的语义)。您不必自定义数百个属性。

Hyperjaxb 实际上具有三个级别的映射:

  • 内置默认值- 内置默认映射。这些是 Hyperjaxb 内部默认值
  • 自定义默认映射- 您可以根据架构自定义的默认值。因此,如果出于某种原因您对默认值不满意,您可以提供自己的默认映射 - 仅在您希望它们与内置默认值不同的地方。
  • 自定义属性和关联映射- 您为每个特定类、属性或关联自定义的东西。同样,只有在您希望它们不同于自定义或内置默认值的地方。

这些自定义级别相互继承。因此,如果您不自定义,您将应用内置默认值。


关于您对 Hyperjaxb 文档质量的反馈。我绝对同意它远非最佳(实际上从未对此提出异议)。

但这是目前可能的最佳状态。我根本没有资源来积极开发或推广该项目。Hyperjaxb 是一个适合数量非常有限的项目或应用程序的利基工具。有一些但非常低的用户/开发人员兴趣,这使得全职甚至兼职开发和维护它在经济上不可行。

坦率地说,我目前的选择是:

  • 关闭并放弃项目
  • 留在低火维护

我很久以前就关闭并放弃该项目,但是:

  • 我知道有些用户对 Hyperjaxb 很满意,因为它就是这样。
  • 我不知道 Hyperjaxb 的任何类似物,它可以提供——甚至是远程的——相同的功能和功能。“模拟”是指基于 XML 模式生成支持 JPA 的类的任何东西。当然还有其他工具,比如使用其他资源(Java 类、UML 等)的出色MOXy,但我不知道有其他工具可以执行 XSD->Java+JPA。不幸的是,我似乎开发了一个独特的工具。

所以在这种情况下,我只能让项目处于非常低的状态,只修复严重的错误和问题。有了尽可能好的文档,它肯定提高了所需经验和学习该工具的热情的门槛。我认为有所有方法可以做到这一点:有大约 50 多页的文档、准备运行的教程和示例、“只需加水”模板项目、大约 60 多个测试项目可用。但它确实提高了门槛。

我真的很抱歉它对你不起作用。请接受我对未能满足您的期望的歉意。

反馈“您的文档很差”,无论它多么真实,都不是有用的贡献。感谢您的反馈,但不,我没有资源可以更加努力地使 Hyperjaxb 更易于使用。

一个有用的贡献是:

于 2014-10-28T20:50:43.193 回答