Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Maven 在外部jaxb绑定中编辑@java.persitence.Table_Maven_Jpa_Xsd_Jaxb_Hyperjaxb_Hyperjaxb3 - Fatal编程技术网

Maven 在外部jaxb绑定中编辑@java.persitence.Table

Maven 在外部jaxb绑定中编辑@java.persitence.Table,maven,jpa,xsd,jaxb,hyperjaxb,hyperjaxb3,Maven,Jpa,Xsd,Jaxb,Hyperjaxb,Hyperjaxb3,我已经建立了一个maven项目,从xsd模式生成Java类。首先,我配置了maven-hyperjaxb3-plugin(参见下面的pom.xml片段),以便它可以将默认的JPA2注释放在实体中。其中一个注释是@java.persitence.Table(name=“Table\u name”)。我想通过一个外部全局绑定来扩展这个注释,这样我也可以将schema的名称放在其中。这样我就可以得到@java.persitence.Table(name=“Table\u name”,schema=“s

我已经建立了一个maven项目,从xsd模式生成Java类。首先,我配置了maven-hyperjaxb3-plugin(参见下面的pom.xml片段),以便它可以将默认的JPA2注释放在实体中。其中一个注释是@java.persitence.Table(name=“Table\u name”)。我想通过一个外部全局绑定来扩展这个注释,这样我也可以将schema的名称放在其中。这样我就可以得到@java.persitence.Table(name=“Table\u name”,schema=“schema\u name”)。有办法做到这一点吗? 在表的名称中全局地加上前缀:@java.persitence.table(name=“prefix\u table\u name”),有什么办法吗

问候 埃尔岑

pom.xml片段

<groupId>org.jvnet.hyperjaxb3</groupId>
<artifactId>maven-hyperjaxb3-plugin</artifactId>
<version>0.6.0</version>
<executions>
    <execution>
        <goals>
            <goal>generate</goal>
        </goals>
    </execution>
</executions>
<configuration>
    <variant>jpa2</variant>
    <extension>true</extension>
    <roundtripTestClassName>EKMSEnvelopeRoundtripTest</roundtripTestClassName>
    <args>
        <arg>-Xinheritance</arg>
        <arg>-XtoString</arg>
        <arg>-Xannotate</arg>
    </args>
    <schemaExcludes>
        <exclude>ekvaattributes.xsd</exclude>
    </schemaExcludes>
</configuration>
<jaxb:globalBindings localScoping="toplevel">
    <!-- JPA-entities must be serializable -->
    <xjc:serializable />
</jaxb:globalBindings>


<jaxb:bindings schemaLocation="schema.xsd"
    node="/xs:schema">

    <annox:annotate>
        <!-- my attempt -->
        <annox:annotate annox:class="javax.persistence.Table"
            schema="schema_name">
        </annox:annotate>
    </annox:annotate>

    <hj:persistence>
        <hj:default-generated-id name="Hjid">
            <orm:generated-value strategy="IDENTITY" />
        </hj:default-generated-id>
    </hj:persistence>
</jaxb:bindings>
org.jvnet.hyperjaxb3
maven-hyperjaxb3-plugin
0.6.0
生成
jpa2
真的
EKMSEnvelope试验
-新遗传
-XtoString
-山奈特
ekvaattributes.xsd
bindings-xjc.xjb代码段

<groupId>org.jvnet.hyperjaxb3</groupId>
<artifactId>maven-hyperjaxb3-plugin</artifactId>
<version>0.6.0</version>
<executions>
    <execution>
        <goals>
            <goal>generate</goal>
        </goals>
    </execution>
</executions>
<configuration>
    <variant>jpa2</variant>
    <extension>true</extension>
    <roundtripTestClassName>EKMSEnvelopeRoundtripTest</roundtripTestClassName>
    <args>
        <arg>-Xinheritance</arg>
        <arg>-XtoString</arg>
        <arg>-Xannotate</arg>
    </args>
    <schemaExcludes>
        <exclude>ekvaattributes.xsd</exclude>
    </schemaExcludes>
</configuration>
<jaxb:globalBindings localScoping="toplevel">
    <!-- JPA-entities must be serializable -->
    <xjc:serializable />
</jaxb:globalBindings>


<jaxb:bindings schemaLocation="schema.xsd"
    node="/xs:schema">

    <annox:annotate>
        <!-- my attempt -->
        <annox:annotate annox:class="javax.persistence.Table"
            schema="schema_name">
        </annox:annotate>
    </annox:annotate>

    <hj:persistence>
        <hj:default-generated-id name="Hjid">
            <orm:generated-value strategy="IDENTITY" />
        </hj:default-generated-id>
    </hj:persistence>
</jaxb:bindings>

我不确定这是否可行,但请尝试该元素,可能它有一个“schema”属性,遗憾的是,它没有那么好的文档记录

问候,, 斯特凡


这里的作者

请参阅@Stefan的答案,只需添加
schema=“schema\u name”
属性:

<orm:table name="item" schema="schema_name"/>
但是您还需要自定义关联的默认值等等。请参见此处的内置默认值:


您还可以在从persistence.xml引用的orm文件中全局定义所有实体的架构。不需要将架构复制到每个
@表
注释中

persistence.xml:

...
  <persistence-unit name="MySchemaPU"  transaction-type="JTA">
     <mapping-file>META-INF/orm.xml</mapping-file>
。。。
META-INF/orm.xml
以及META-INF文件夹中的orm.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"
                 version="1.0">
 <persistence-unit-metadata>

  <persistence-unit-defaults>
   <schema>schema_name</schema>
  </persistence-unit-defaults>
 </persistence-unit-metadata>
</entity-mappings

模式名称

@lexicore Thnx寻求帮助。在把你的建议放在正确的环境中之后,它起了作用

    <hj:persistence>
        <hj:default-entity>
            <!-- no need to overwrite the default generated table names-->
            <orm:table schema="schema_name" />
        </hj:default-entity>
    </hj:persistence>


Hi,回答是thnx。这个解决方案的问题是,我无法为该XSD模式中包含的所有已编译XSD和XSD-s类全局配置它。我希望为不同的Java项目生成类,并且每次都使用另一个模式名。这就是为什么我想为我的xsd中定义的所有实体以及所有导入的xsd全局配置模式名的原因。Thnx提供帮助。在把你的建议放在正确的环境中之后,它起了作用。嗨,谢谢你的回答。不幸的是,这并没有解决我的问题。欲知更多信息,请参阅以下答案中的评论。嗨,OndrejM,我也考虑过这一点。但是我想从这个项目中生成两个jar文件,然后在同一个项目中使用它们。如果我在persistence.xml中配置了模式名,我应该使用两个数据源,并且我正在努力避免这种情况。对于SEO,我会问这样一个问题:如何使用hyperjaxb3更改所有表的默认模式。