配置hyperjaxb以创建hibernate映射和mysql数据库

时间:2014-10-08 22:07:17

标签: java hibernate jaxb hbm2ddl hyperjaxb

我正在使用hyperjaxb从xsd文件生成Java类。如何配置它来生成hibernate注释,并触发hbm2ddl创建一个包含生成类的表的MySQL数据库?

我下载了hibernate from this link的采购订单示例,然后导航到cmd.exe中的目标目录并运行mvn clean install,但生成的文件夹不包含任何java类,这个也没有包含任何hibernate / MySQL。我想得到一个工作示例,它从已下载的xsd文件创建所有内容,这样我就可以将自己的xsd文件插入代码中,并自动生成所有java / hibernate / mysql。这样我就可以花时间调整我的xsd文件,这样生成的java / hibernate / MySQL就是我所需要的。

代码示例或分步说明非常有用。我正在使用eclipse。


**编辑:**

在发布其他一些问题之后,回答了这个问题。要找到此问题的完整答案,您需要查看其他问题的答案,尤其是the one at this link

2 个答案:

答案 0 :(得分:4)

<强>更新

最后看来OP正在项目的根目录中寻找生成的类而不是target\generated-source\xjc,尽管tutorial明确说明了要查看的位置:

  

如果你浏览目标/ generated-sources / xjc目录,你会发现   生成的java文件很少,例如PurchaseOrderType.java


当你说什么都没有产生时,我不明白。我刚刚重新检查过,一切正常。

我的步骤是:

  • 下载hyperjaxb3-ejb-samples-po-initial-0.5.6-maven-src.zip
  • 解压
  • 转到hyperjaxb3-ejb-samples-po-initial-0.5.6
  • mvn clean install

这是我得到的:

[INFO] ------------------------------------------------------------------------
[INFO] Building Hyperjaxb3 Samples [po-initial:maven] 0.5.6
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ hyperjaxb3-ejb-samples-po-initial-maven ---
[INFO] Deleting C:\Projects\workspaces\hj3\dist\hyperjaxb3-ejb-samples-po-initial-0.5.6\target
[INFO] 
[INFO] --- maven-hyperjaxb3-plugin:0.6.0:generate (default) @ hyperjaxb3-ejb-samples-po-initial-maven ---
[INFO] Sources are not up-to-date; XJC execution will be executed.
[WARNING] According to the Java Persistence API specification, section 2.1, entities must be top-level classes:
"The entity class must be a top-level class."
Your JAXB model is not customized as with top-level local scoping, please use the <jaxb:globalBinding localScoping="toplevel"/> global bindings customization.
        org.jvnet.hyperjaxb3.ejb.plugin.EjbPlugin

[WARNING] According to the Java Persistence API specification, section 2.1, entities must implement the serializable interface:
"If an entity instance is to be passed by value as a detached object
(e.g., through a remote interface), the entity class must implement
 the Serializable interface."
Your JAXB model is not customized as serializable, please use the <jaxb:serializable/> global bindings customization element to make your model serializable.
        org.jvnet.hyperjaxb3.ejb.plugin.EjbPlugin

[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ hyperjaxb3-ejb-samples-po-initial-maven ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 1 resource
[INFO] Copying 0 resource
[INFO] Copying 1 resource
[INFO] 
[INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ hyperjaxb3-ejb-samples-po-initial-maven ---
[WARNING] File encoding has not been set, using platform encoding Cp1252, i.e. build is platform dependent!
[INFO] Compiling 5 source files to C:\Projects\workspaces\hj3\dist\hyperjaxb3-ejb-samples-po-initial-0.5.6\target\classes
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ hyperjaxb3-ejb-samples-po-initial-maven ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 2 resources
[INFO] 
[INFO] --- maven-compiler-plugin:2.5.1:testCompile (default-testCompile) @ hyperjaxb3-ejb-samples-po-initial-maven ---
[WARNING] File encoding has not been set, using platform encoding Cp1252, i.e. build is platform dependent!
[INFO] Compiling 5 source files to C:\Projects\workspaces\hj3\dist\hyperjaxb3-ejb-samples-po-initial-0.5.6\target\test-classes
[INFO] 
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ hyperjaxb3-ejb-samples-po-initial-maven ---
[INFO] Surefire report directory: C:\Projects\workspaces\hj3\dist\hyperjaxb3-ejb-samples-po-initial-0.5.6\target\surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running RoundtripTest
Detected [file:/C:/Projects/workspaces/hj3/dist/hyperjaxb3-ejb-samples-po-initial-0.5.6/target/classes/META-INF/persistence.xml].
    RoundtripTest

Loading entity manager factory properties.
    RoundtripTest

Loading entity manager factory properties from [file:/C:/Projects/workspaces/hj3/dist/hyperjaxb3-ejb-samples-po-initial-0.5.6/target/test-classes/persistence.properties].
    RoundtripTest

Testing samples.
    RoundtripTest

Sample directory [C:\Projects\workspaces\hj3\dist\hyperjaxb3-ejb-samples-po-initial-0.5.6\src\test\samples].
    RoundtripTest

Testing sample [po.xml].
    RoundtripTest

Unmarshalling.
    RoundtripTest

Opening session.
    RoundtripTest

Saving the object.
    RoundtripTest

Opening session.
    RoundtripTest

Loading the object.
    RoundtripTest

Closing the session.
    RoundtripTest

Initial object:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purchaseOrder orderDate="1999-10-20">
    <shipTo country="US">
        <name>Alice Smith</name>
        <street>123 Maple Street</street>
        <city>Mill Valley</city>
        <state>CA</state>
        <zip>90952</zip>
    </shipTo>
    <billTo country="US">
        <name>Robert Smith</name>
        <street>8 Oak Avenue</street>
        <city>Old Town</city>
        <state>PA</state>
        <zip>95819</zip>
    </billTo>
    <comment>Hurry, my lawn is going wild!</comment>
    <items>
        <item partNum="872-AA">
            <productName>Lawnmower</productName>
            <quantity>1</quantity>
            <USPrice>148.95</USPrice>
            <comment>Confirm this is electric</comment>
        </item>
        <item partNum="926-AA">
            <productName>Baby Monitor</productName>
            <quantity>1</quantity>
            <USPrice>39.98</USPrice>
            <shipDate>1999-05-21</shipDate>
        </item>
    </items>
</purchaseOrder>

    RoundtripTest

Source object:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purchaseOrder orderDate="1999-10-20" Hjid="1">
    <shipTo country="US" Hjid="2">
        <name>Alice Smith</name>
        <street>123 Maple Street</street>
        <city>Mill Valley</city>
        <state>CA</state>
        <zip>90952</zip>
    </shipTo>
    <billTo country="US" Hjid="1">
        <name>Robert Smith</name>
        <street>8 Oak Avenue</street>
        <city>Old Town</city>
        <state>PA</state>
        <zip>95819</zip>
    </billTo>
    <comment>Hurry, my lawn is going wild!</comment>
    <items Hjid="1">
        <item partNum="872-AA" Hjid="1">
            <productName>Lawnmower</productName>
            <quantity>1</quantity>
            <USPrice>148.95</USPrice>
            <comment>Confirm this is electric</comment>
        </item>
        <item partNum="926-AA" Hjid="2">
            <productName>Baby Monitor</productName>
            <quantity>1</quantity>
            <USPrice>39.98</USPrice>
            <shipDate>1999-05-21</shipDate>
        </item>
    </items>
</purchaseOrder>

    RoundtripTest

Result object:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purchaseOrder orderDate="1999-10-20" Hjid="1">
    <shipTo country="US" Hjid="2">
        <name>Alice Smith</name>
        <street>123 Maple Street</street>
        <city>Mill Valley</city>
        <state>CA</state>
        <zip>90952</zip>
    </shipTo>
    <billTo country="US" Hjid="1">
        <name>Robert Smith</name>
        <street>8 Oak Avenue</street>
        <city>Old Town</city>
        <state>PA</state>
        <zip>95819</zip>
    </billTo>
    <comment>Hurry, my lawn is going wild!</comment>
    <items Hjid="1">
        <item partNum="872-AA" Hjid="1">
            <productName>Lawnmower</productName>
            <quantity>1</quantity>
            <USPrice>148.95</USPrice>
            <comment>Confirm this is electric</comment>
        </item>
        <item partNum="926-AA" Hjid="2">
            <productName>Baby Monitor</productName>
            <quantity>1</quantity>
            <USPrice>39.98</USPrice>
            <shipDate>1999-05-21</shipDate>
        </item>
    </items>
</purchaseOrder>

    RoundtripTest

Checking the document identity.
    RoundtripTest

Finished testing sample [po.xml].
    RoundtripTest

Finished testing samples.
    RoundtripTest

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.552 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ hyperjaxb3-ejb-samples-po-initial-maven ---
[INFO] Building jar: C:\Projects\workspaces\hj3\dist\hyperjaxb3-ejb-samples-po-initial-0.5.6\target\hyperjaxb3-ejb-samples-po-initial-maven-0.5.6.jar
[INFO] 
[INFO] --- maven-install-plugin:2.4:install (default-install) @ hyperjaxb3-ejb-samples-po-initial-maven ---
[INFO] Installing C:\Projects\workspaces\hj3\dist\hyperjaxb3-ejb-samples-po-initial-0.5.6\target\hyperjaxb3-ejb-samples-po-initial-maven-0.5.6.jar to C:\Repository\org\jvnet\hyperjaxb3\hyperjaxb3-ejb-samples-po-initial-maven\0.5.6\hyperjaxb3-ejb-samples-po-initial-maven-0.5.6.jar
[INFO] Installing C:\Projects\workspaces\hj3\dist\hyperjaxb3-ejb-samples-po-initial-0.5.6\pom.xml to C:\Repository\org\jvnet\hyperjaxb3\hyperjaxb3-ejb-samples-po-initial-maven\0.5.6\hyperjaxb3-ejb-samples-po-initial-maven-0.5.6.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 12.100 s
[INFO] Finished at: 2014-10-09T00:42:10+01:00
[INFO] Final Memory: 22M/96M
[INFO] ------------------------------------------------------------------------

完整的mvn clean install -X log是here

所以我希望你看,它完美无缺。请发帖给你mvn clean install -X,也许你做错了。

现在,关于你的问题,这是MySQL的例子:

https://github.com/highsource/hyperjaxb3/tree/master/ejb/tests/po-mysql

该项目包含一小段hbm2ddl代:

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

hbm2ddl由于某种原因被注释掉,不确定它是否有效,但它应该给出方向。

答案 1 :(得分:1)

这是回复MySQL部分的another answer的一部分。我在此处添加此内容以供将来参考,以试图结束此问题。

所以从现在起我假设PO tutorial工作正常:生成代码,使用HSQLDB数据库运行往返测试等。

现在我们要解决两个问题:

  • 如何切换到MySQL?
  • 如何使用hbm2ddl生成数据库架构?

让我们开始。

切换到MySQL

首先,您必须在pom.xml中用MySQL替换HSQLDB。删除它:

    <dependency>
        <groupId>hsqldb</groupId>
        <artifactId>hsqldb</artifactId>
        <version>1.8.0.7</version>
        <scope>test</scope>
    </dependency>

并添加:

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.0.5</version>
        <scope>test</scope>
    </dependency>

接下来,修改src/test/resources/persistence.properties。替换这个:

hibernate.dialect=org.hibernate.dialect.HSQLDialect
hibernate.connection.driver_class=org.hsqldb.jdbcDriver
hibernate.connection.username=sa
hibernate.connection.password=
hibernate.connection.url=jdbc:hsqldb:target/test-database/database
hibernate.hbm2ddl.auto=create-drop
hibernate.cache.provider_class=org.hibernate.cache.HashtableCacheProvider
hibernate.jdbc.batch_size=0

有了这个:

hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.connection.username=...
hibernate.connection.password=...
hibernate.connection.url=jdbc:mysql://localhost/hj3
hibernate.hbm2ddl.auto=create-drop
hibernate.cache.provider_class=org.hibernate.cache.HashtableCacheProvider
hibernate.jdbc.batch_size=0

我个人现在手头没有MySQL数据库,所以我无法真正测试往返。因此,我会发表评论

<!--roundtripTestClassName>RoundtripTest</roundtripTestClassName-->
pom.xml中的

如果您手边有数据库,只需在提到的persistence.properties文件中配置正确的URL /用户名/密码。

此时,您的Maven项目被重新配置为使用MySQL。如果没有注释掉往返测试并且数据库可用,那么roundrip测试应该与DB一起运行,即创建模式,导入示例XML,读回并比较alpha和omega。

现在我们有关于MySQL的教程,可以继续。

生成数据库架构

这是一个难以理解的部分。

要在文件中生成数据库架构,您必须使用hbm2ddl工具。有一些Maven插件,在Hibernate 3的情况下,似乎Codehaus插件是领先的插件。最后,我已经找到了以下配置。您必须将以下插件添加到pom.xmlproject/build/plugins):

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>hibernate3-maven-plugin</artifactId>
            <version>3.0</version>
            <executions>
                <execution>
                    <id>generate-schema</id>
                    <phase>compile</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <hibernatetool>
                    <classpath>
                        <path location="${project.build.directory}/classes" />
                    </classpath>

                    <jpaconfiguration persistenceunit="org.jvnet.hyperjaxb3.ejb.tests.pocustomized" propertyfile="src/test/resources/persistence.properties"/>

                    <hbm2ddl export="false" create="true" update="false" format="true" outputfilename="schema.ddl" />

                </hibernatetool>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.hibernate.javax.persistence</groupId>
                    <artifactId>hibernate-jpa-2.0-api</artifactId>
                    <version>1.0.0.Final</version>
                </dependency>
                <dependency>
                    <groupId>org.hibernate</groupId>
                    <artifactId>hibernate-entitymanager</artifactId>
                    <version>3.6.5.Final</version>
                </dependency>
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>5.0.5</version>
                </dependency>
            </dependencies>
        </plugin>

很少有重要事项:

  • Hyperjaxb3会生成JPA注释,因此您必须使用jpaconfiguration
  • 因此hibernate3-maven-plugin必须在编译阶段执行(您需要类来读取注释,因此必须在那时编译它们。)
  • 您必须将已编译的类(${project.build.directory}/classes)包含在hibernatetool的类路径中,以便它可以发现类和读取注释。
  • 你必须让hibernatetool知道你在哪里找到你的Hibernate属性(propertyfile="src/test/resources/persistence.properties")。
  • 最后,您必须告知它,您要处理哪个持久性单元(persistenceunit="org.jvnet.hyperjaxb3.ejb.tests.pocustomized")。看看target/generated-sources/xjc/META-INF/persistence.xml
  • 最后,添加所有必需的依赖项。

最后,您到达我上面发布的配置。此时,构建还应在target/sql/hibernate3/schema.ddl中生成数据库模式。