我在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
设置全局默认值(具体是什么语法),以便只覆盖某些属性?
答案 0 :(得分:2)
请参阅先前询问的cascade
示例中的类似问题:
并查看使用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-one
,default-one-to-many
,default-many-to-many
。这些自定义将全局应用(“默认映射”的语义)。您不必自定义数百个属性。
Hyperjaxb实际上有三个级别的映射:
这些自定义级别相互继承。因此,如果您不进行自定义,则会应用内置默认值。
关于您对Hyperjaxb文档质量的反馈。我绝对同意它远非最佳(实际上从未对此提出异议)。
但这是目前最好的状态。我根本没有资源积极开发或推广该项目。 Hyperjaxb是一个利基工具,可以容纳非常有限的项目或应用程序。有一些但用户/开发人员的兴趣非常低,这使得开发和维护它完全甚至兼职都在经济上不可行。
坦率地说,我现在的选择是:
我很久以前就关闭并放弃了这个项目,但是:
因此,在这种情况下,我只能将项目置于极低的火焰中,只需修复严重的错误和问题。凭借尽可能好的文档,它肯定会提高所需经验和学习该工具的渴望的门槛。我认为有这样的方法:有大约50多页的文档,可立即运行的教程和示例,“只需添加水”模板项目,大约60多个测试项目可用。但肯定会提高门槛。
我真的很抱歉它不适合你。请接受我的道歉是因为没有达到你的期望。
反馈“你的文档很差”,无论它多么真实,都不是一个有用的贡献。感谢您提供此反馈,但不,我没有资源更加努力地使Hyperjaxb更易于使用。
有用的贡献是: