我有以下星座: 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