Hyperjaxb 3 导入 XSD 和 persistence.xml

阿比耶兹

这是我第一次尝试使用 Hyperjaxb3。我有我的 2 XSD 的片段,如下所示

合同完整信息.xsd

<xsd:import namespace="http://homecredit.net/homerselect/common/v1" schemaLocation="Common.xsd"/>

<xsd:element name = "ContractFullInfoRequest">
    <xsd:complexType>
        <xsd:sequence>
            <xsd:element name="systemEvent" type="common:ContractSystemEventType"/>
            <xsd:element name="data" type="ContractFullInfo"/>
        </xsd:sequence>
    </xsd:complexType>
</xsd:element>

<xsd:complexType name="ContractPerson">
    <xsd:sequence>
        <xsd:element name="cuid" type="xsd:long"/>
        <xsd:element name="personRole" type="PersonRoleType"/>
    </xsd:sequence>
</xsd:complexType>

通用文件

<xsd:complexType name="ContractPerson">
    <xsd:sequence>
        <xsd:element name="cuid" type="xsd:long"/>
        <xsd:element name="personRole" type="PersonRoleType"/>
    </xsd:sequence>
</xsd:complexType>

问题是它会生成两个 ContractPerson 类,如下所示:

        <class>net.homecredit.homerselect.common.v1.ContractPerson</class> <==
        <class>net.homecredit.homerselect.common.v1.MoneyDto</class>
        <class>net.homecredit.homerselect.contract.v3.BankAccount</class>
        <class>net.homecredit.homerselect.contract.v3.ClosedEndParameter</class>
        <class>net.homecredit.homerselect.contract.v3.ContractBase</class>
        <class>net.homecredit.homerselect.contract.v3.ContractCommodity</class>
        <class>net.homecredit.homerselect.contract.v3.ContractDocument</class>
        <class>net.homecredit.homerselect.contract.v3.ContractEvent</class>
        <class>net.homecredit.homerselect.contract.v3.ContractFullInfo</class>
        <class>net.homecredit.homerselect.contract.v3.ContractFullInfoRequest</class>
        <class>net.homecredit.homerselect.contract.v3.ContractParameter</class>
        <class>net.homecredit.homerselect.contract.v3.ContractPerson</class> <==
        <class>net.homecredit.homerselect.contract.v3.ContractService</class>
        <class>net.homecredit.homerselect.contract.v3.RefinancedContract</class>
        <class>net.homecredit.homerselect.contract.v3.RevolvingParameter</class>

它在部署过程中给了我错误

 Entity name must be unique in a persistence unit. Entity name [ContractPerson] is used for the entity classes [net.homecredit.homerselect.common.v1.ContractPerson] and [net.homecredit.homerselect.contract.v3.ContractPerson].

我的 Java 配置的一部分(我目前已评论)

  @Bean
    public DataSource dataSource() throws NamingException {
        return (DataSource) new JndiTemplate().lookup(env.getProperty("spring.datasource.jndi-name"));
    }

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() throws NamingException {
        LocalContainerEntityManagerFactoryBean em
                = new LocalContainerEntityManagerFactoryBean();
        em.setPackagesToScan(new String[]{"net.homecredit.homerselect.contract.v3"});
        em.setPersistenceUnitName("net.homecredit.homerselect.common.v1:net.homecredit.homerselect.contract.v3");
        em.setJtaDataSource(dataSource());

        Properties properties = new Properties();
        properties.setProperty("hibernate.dialect", env.getProperty("spring.jpa.properties.hibernate.dialect"));
        properties.setProperty("hibernate.hbm2ddl.auto", env.getProperty("spring.jpa.hibernate.ddl-auto"));
        em.setJpaProperties(properties);

        return em;
    }

我的问题:

  1. 两个类完全相同。我怎样才能选择一个?
  2. 我正在使用 Spring Boot,有没有办法使用 Spring Boot java 配置覆盖persistence.xml
乐可可

您的类与您的架构中有两种不同的复杂类型不同。他们也可能引用了不同的PersonRoleTypes,但是如果没有看到完整的架构就很难说。

虽然将这些复杂类型映射到同一个 Java 类并非不可能,但我不会这样做。这些在你的模式中是不同的类型,你也应该在 Java 中保持它们不同。

由于您遇到具有相同本地名称的类的问题,最简单的解决方案是重命名其中一个。使用如下绑定:

<jaxb:bindings
    version="1.0"
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:hj="http://hyperjaxb3.jvnet.org/ejb/schemas/customizations"
    xmlns:orm="http://java.sun.com/xml/ns/persistence/orm"
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
    jaxb:extensionBindingPrefixes="xjc hj orm">

    <jaxb:bindings schemaLocation="Common.xsd" node="/xs:schema">
        <jaxb:bindings node="xs:complexType[@name='ContractPerson']">
            <jaxb:class name="CommonContractPerson"/>
        </jaxb:bindings>
    </jaxb:bindings>
</jaxb:bindings>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将hyperjaxb采购订单教程导入Eclipse

来自分类Dev

使用JPA和Hibernate在Persistence.xml中配置C3P0

来自分类Dev

hyperjaxb3 not generating files

来自分类Dev

事务和JPA / Persistence.xml

来自分类Dev

Hyperjaxb:按XML属性排除XML元素

来自分类Dev

XML同时进行DTD和XSD验证

来自分类Dev

如何从XML创建XSD和Java类

来自分类Dev

验证xml和xsd时出错

来自分类Dev

如何针对导入另一个XSD的XSD验证XML

来自分类Dev

使用persistence.xml和hibernate.cfg.xml

来自分类Dev

使用persistence.xml和hibernate.cfg.xml

来自分类Dev

SqlServer表/库名使用hyperjaxb3和springboot截断为30个字符

来自分类Dev

hyperjaxb3不生成文件

来自分类Dev

HyperJaxb3是否仍然维护?

来自分类Dev

使用hyperjaxb3的休眠索引

来自分类Dev

没有persistence.xml的Hibernate和Guice

来自分类Dev

导入XML和跳过错误(PHP)

来自分类Dev

导入XML和跳过错误(PHP)

来自分类Dev

使用XPath和编码导入xml

来自分类Dev

persistence.xml从.properties文件导入数据库参数值

来自分类Dev

为什么同时将XSD和DTD用于XML?

来自分类Dev

XML命名空间,模式验证(XSD)和XSLT

来自分类Dev

使用MySQL和XSD文件验证XML字段

来自分类Dev

使用XSD(xerces和SchemaFactory)的Android XML验证错误

来自分类Dev

XML验证:XSD中的并发无序和出现要求

来自分类Dev

针对在WSO2 ESB中导入另一个xsd的Schema验证XML

来自分类Dev

Python3-导入和覆盖方法

来自分类Dev

jaxb,xsd导入无法识别

来自分类Dev

jaxb,xsd导入无法识别