gpt4 book ai didi

java - 在 hyperjaxb 中自定义获取类型

转载 作者:行者123 更新时间:2023-11-30 03:42:09 24 4
gpt4 key购买 nike

我读到this link关于 hyperjaxb 中的 fetchtype。从表面上看,似乎只能在xsd文件中添加一个simpleTypefetch-type,然后添加一个为每个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 设置全局默认值,以便只需要覆盖某些属性?

最佳答案

请参阅 cascade 上的示例中的类似问题之前问过:

customizing hibernate properties in hyperjaxb

并检查 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-one , default-one-to-many , default-many-to-many以及。这些定制将在全局范围内应用(“默认映射”的语义)。您不必自定义数百个属性。

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

  • Built-in defaults - 内置默认映射。这些是 Hyperjaxb 内部默认值
  • Customized default mappings - 您可以根据模式自定义默认值。因此,如果您出于某种原因对默认值不满意,您可以提供自己的默认映射 - 仅在您希望它们与内置默认值不同的地方提供。
  • Customized property and association mappingsclasses - 您根据特定类别、属性或协会自定义的内容。同样,只有在您希望它们与自定义或内置默认值不同的地方。

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

<小时/>

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

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

坦白说,我目前的选择是:

  • 关闭并放弃项目
  • 保持小火维护

我很早就会关闭并放弃该项目,但是:

  • 我知道有些用户对 Hyperjaxb 非常满意。
  • 我不知道有任何与 Hyperjaxb 类似的东西,它可以提供 - 即使是远程 - 相同的功能和功能。我所说的“模拟”是指任何能够基于 XML 模式生成支持 JPA 的类的东西。当然还有其他工具,比如辉煌的MOXy它使用其他来源(Java 类、UML,等等),但我不知道没有其他工具可以执行 XSD->Java+JPA。不幸的是,我似乎开发了一种独特的工具。

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

我真的很抱歉它不适合你。对于未能满足您的期望,请接受我的歉意。

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

一个有用的贡献是:

关于java - 在 hyperjaxb 中自定义获取类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26603884/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com