我有以下星座: B1.xsd和B2.xsd都导入A.xsd。使用maven-hyperjaxb3-plugin我使用JPA批注为B1.xsd和B2.xsd创建了Java类。所以A.xsd的类是在B1.xsd的项目中创建的,以及在B2.xsd的项目中创建的。 为了在一个持久性单元中使用这两组类,我通过jaxb外部绑定来设置每个实体上的数据库模式,如Editing @java.persitence.Table in external jaxb-Binding中所示。通过外部jaxb-Binding编辑@ java.persitence.Entity的名称参数
的问题,部署到wildfly后,wildfly抛出org.hibernate.DuplicateMappingException:重复导入:B1_ClassName指的是B1_ClassName和B2_ClassName(尝试使用自动导入= \ “假\”)“}}
所以我需要做的是通过JAXB编辑实体标注的名称参数外部约束力,使
@XmlRootElement(name = "B1_Element1")
@Immutable
@Cacheable(true)
@Entity(name = "B1_Element1")
@Table(name = "B1_Element1")
public class B1_Element1
implements Serializable, Equals, HashCode, ToString
{
...
}
看起来像
@XmlRootElement(name = "B1_Element1")
@Immutable
@Cacheable(true)
@Entity(name = "PACKAGE_NAME.B1_Element1")
@Table(name = "B1_Element1")
public class B1_Element1
implements Serializable, Equals, HashCode, ToString
{
...
}
我的实际绑定,xjc.xjb看起来像这样
<jaxb:globalBindings localScoping="toplevel">
<xjc:serializable />
</jaxb:globalBindings>
<jaxb:bindings schemaLocation="B1.xsd"
node="/xs:schema">
<hj:persistence>
<hj:default-generated-id name="Hjid">
<orm:generated-value strategy="IDENTITY" />
</hj:default-generated-id>
<hj:default-entity>
<orm:table schema="B1_database_schema" />
</hj:default-entity>
</hj:persistence>
<jaxb:schemaBindings>
<jaxb:package name="b1.package.name" />
</jaxb:schemaBindings>
</jaxb:bindings>
任何人有一个想法,我怎么可以编辑@ java.persitence.Entity的名称参数?
你好@lexicore,谢谢你的回答。我知道这不是最好的解决方案,但使用hyperjaxb做疯狂的事情比使用标准解决方案更有趣:) 有没有办法编辑所有复杂类型的名称参数(例如给它们一个前缀)立刻?这会有帮助,因为我有近100个。 – Erzen
@Erzen那么,如果你想要硬核,这是硬核。你可以编写和配置你自己的命名策略。这里是[示例](https://github.com/highsource/hyperjaxb3/tree/master/ejb/tests/custom-naming)。实现/覆盖'Naming.getEntityName(...)'方法。 – lexicore