在hyperjaxb中自定义提取类型

时间:2014-10-28 08:37:44

标签: java jpa jaxb xsd hyperjaxb

我在hyperjaxb中读到了关于fetchtype的this link。从它的外观来看,似乎只能在simpleType文件中添加fetch-type xsd,然后为每个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设置全局默认值(具体是什么语法),以便只覆盖某些属性?

1 个答案:

答案 0 :(得分:2)

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

  

customizing hibernate properties in hyperjaxb

并查看使用customizations schema的JPA ORM schema:

这将导致类似:

<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-onedefault-one-to-manydefault-many-to-many。这些自定义将全局应用(“默认映射”的语义)。您不必自定义数百个属性。

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

  • Built-in defaults - 内置默认映射。这些是Hyperjaxb内部默认值
  • Customized default mappings - 您可以根据架构自定义的默认值。因此,如果您因某些原因对默认设置不满意,可以提供自己的默认映射 - 只在那里,您希望它们与内置默认值不同
  • Customized property and association mappingsclasses - 您根据特定的类,属性或关联自定义的内容。同样,只有您希望它们与自定义或内置默认值不同。

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


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

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

坦率地说,我现在的选择是:

  • 关闭并放弃该项目
  • 保留低火焰维护

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

  • 我知道有些用户对Hyperjaxb非常满意。
  • 我不知道Hyperjaxb的任何模拟,它甚至可以远程提供相同的功能和功能。 “模拟”是指基于XML Schema生成启用JPA的类的任何内容。当然还有其他工具,比如辉煌的MOXy使用其他来源(Java类,UML,等等),但我不知道其他工具可以做XSD-&gt; Java + JPA。不幸的是,我似乎开发了一种独特的工具。

因此,在这种情况下,我只能将项目置于极低的火焰中,只需修复严重的错误和问题。凭借尽可能好的文档,它肯定会提高所需经验和学习该工具的渴望的门槛。我认为有这样的方法:有大约50多页的文档,可立即运行的教程和示例,“只需添加水”模板项目,大约60多个测试项目可用。但肯定会提高门槛。

我真的很抱歉它不适合你。请接受我的道歉是因为没有达到你的期望。

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

有用的贡献是: