1

我有以下星座:B1.xsd 和 B2.xsd 都导入 A.xsd。使用maven-hyperjaxb3-plugin,我为 B1.xsd 和 B2.xsd 创建了带有 JPA 注释的 Java 类。所以 A.xsd 的类是在 B1.xsd 的项目中创建的,而 es 在 B2.xsd 的项目中也是如此。为了在一个持久性单元中使用这两组类,我通过 jaxb 外部绑定设置每个实体上的数据库模式,如Editing @java.persitence.Table in external jaxb-Binding所示。

问题是,在部署到wildfly后,wildfly会抛出org.hibernate.DuplicateMappingException: duplicate import: B1_ClassName refer to both B1_ClassName and B2_ClassName (尝试使用auto-import=\"false\")"}}

所以我需要做的是通过jaxb外部绑定编辑Entity注解的name参数,这样

@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
{
...
}

我的实际bindings-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 的名称参数吗?

4

1 回答 1

0

免责声明:我是Hyperjaxb的作者。

答案是您不需要自定义它。即,如果您需要对此进行自定义,则有问题。

您面临的问题是因为您为A.xsd模式生成了两组类,可能在不同的包中。如果您有 chameleon 架构(A.xsd没有目标命名空间),或者您因为拥有B1.xsdand 而只编译了两次,则可能会出现这种情况B2.xsd

正确的解决方案是不要编译A.xsd两次。我希望你没有变色龙模式(这对于 JAXB 来说是一个非常糟糕的设计模式)。在这种情况下,您可以一起编译和编译A.xsd,也可以单独编译所有的。您可以先编译并将其用作 B1 和 B2 中的插曲。请参阅使用剧集了解它的工作原理。B1.xsdB2.xsdA.xsd

在任何情况下,您都不应该为A.xsd类生成不同的包。

要回答您的具体问题 - 尝试使用以下方法自定义您的复杂类型:

<hj:entity name="MyUniqueName"/>

我认为这应该覆盖自动生成的名称。然而,这不是要走的路。

附言。这是剧集的测试项目:

https://github.com/highsource/hyperjaxb3/tree/master/ejb/tests/episodes

于 2015-11-09T10:39:25.470 回答