我正在尝试将同一复杂类型的多个实例嵌入到单个实体中,除非我为每个实例定义新的复杂类型,否则这似乎不起作用。据我所知,这可能是因为默认的hyperjaxb3命名策略。 有没有办法通过注释更改默认的hyperjaxb3命名策略(例如,类似于设置id策略)而不是向插件本身添加代码? 谢谢,弗雷德里克
答案 0 :(得分:1)
如果你提供一个你想要做的事情的例子会更容易:架构,生成的注释以及你想要生成的内容。
这是我在其中一个测试项目中的内容。架构:
<xs:element name="a" type="aType"/>
<xs:complexType name="aType">
<xs:sequence>
<xs:element name="b0" type="bType" minOccurs="0"/>
<xs:element name="b1" type="bType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="bType">
<xs:annotation>
<xs:appinfo>
<hj:embeddable/>
</xs:appinfo>
</xs:annotation>
<xs:sequence>
<xs:element name="c" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="999"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="d" type="xs:int" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
生成:
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "c", column = @Column(name = "B0_C", length = 999)),
@AttributeOverride(name = "d", column = @Column(name = "B0_D", precision = 10, scale = 0))
})
public BType getB0() {
return b0;
}
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "c", column = @Column(name = "B1_C", length = 999)),
@AttributeOverride(name = "d", column = @Column(name = "B1_D", precision = 10, scale = 0))
})
public BType getB1() {
return b1;
}
我没有看到命名冲突。
<强>更新强>
以下是有关命名自定义的一些链接:
查看本指南:
http://confluence.highsource.org/display/HJ3/Customization+Guide
这是一个测试项目,展示了其中的一些功能:
http://java.net/projects/hj3/sources/svn/show/trunk/ejb/tests/cu-one
您还可以编写和配置自己的命名策略:
http://java.net/projects/hj3/sources/svn/show/trunk/ejb/tests/custom-naming