我在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>


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

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


另外,在所有方法中,一个具体如何(即使用什么特定语法)设置fetchtype的全局默认值,从而仅需覆盖某些属性?

最佳答案

请参阅前面问过的cascade上的示例,查看类似的问题:


  customizing hibernate properties in hyperjaxb


并检查使用customizations schema的Hyperjaxb JPA ORM schema


many-to-one/@fetch
fetchType


这将导致如下结果:

<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-> Java + JPA。不幸的是,似乎我已经开发了一个独特的工具。


因此,在这种情况下,我只能让项目处于低火,仅修复严重的错误和问题。有了足够的文档,它无疑提高了所需的经验和学习该工具的热情。我认为这样做有各种手段:有50多个页面的文档,随时可以运行的教程和示例,“随便加水”模板项目,约60多个测试项目可用。但这确实提高了门槛。

非常抱歉,它不适用于您。请接受我的歉意,未达到您的期望。

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

一个有用的贡献是:


报告bugs and issues,以便可以复制和修复它们。
提供pull requests,以便我可以查看和合并它们。
帮助documentation

07-24 09:28