好的,这会很长。
首先,让我们确定我们从哪里开始。在这个问题中,我们终于发现本教程运行良好,只是在查找生成的 Java 代码时遇到了一些困难。
附带说明一下,本教程是一个使用maven-hyperjaxb3-plugin
. 在 Maven 中的标准约定是在target\generated-sources\myTool
. JAXB 的代码生成工具称为 XJC,因此模式派生代码的标准约定是target\generated-sources\xjc
. maven-jaxb2-plugin
也这样做。
所以从现在开始,我假设 PO 教程工作正常:生成代码,使用 HSQLDB 数据库运行往返测试等。
您现在要问的基本上是三件事:
- 如何切换到 MySQL?
- 如何使用 hbm2ddl 生成数据库模式?
- 如何将项目导入 Eclipse?
请注意,这些都不是 Hyperjaxb 特有的。
让我们开始吧。
切换到 MySQL
首先,您必须在pom.xml
. 删除这个:
<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。如果没有注释掉往返测试并且数据库可用,那么往返测试应该与数据库一起运行,即创建模式、导入示例 XML、读回并比较 alpha 和 omega。
所以现在我们有了关于 MySQL 的教程,可以继续学习了。
生成数据库模式
这是一个棘手的部分。
为了在文件中生成数据库模式,您必须使用该hbm2ddl
工具。有 Maven 插件,在 Hibernate 3 的情况下,Codehaus 插件似乎是领先的插件。最后,我想出了以下配置。您必须将以下插件添加到您的pom.xml
( project/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
. 这是第二个问题。
所以现在我们已经完成了 Maven 项目,让我们切换到 Eclipse。
将项目导入 Eclipse
我个人不明白的是
8.) 将hyperjaxb生成的文件导入target/generated-sources/xjc
Hyperjaxb3 只是在这个目录中生成 Java 文件(在包中)。所以你不会在任何地方导入任何东西。不要尝试手动复制文件。
正确的做法是在 Eclipse 中使用标准的 m2e 插件,然后,只需将 Maven 项目导入 Eclipse 工作区。
File > Import... > Existing Maven Projects > Root Directory >(导航到包含pom.xml
教程项目的目录)>(选中pom.xml
)> Finish
不,您将在 Eclipse 中有一个项目。Eclipse 可能会抱怨hibernate3-maven-plugin
. (Eclipse 不知道,如何将这个插件集成到 Eclipse 的构建周期中。)选择“不执行(添加到 pom)”。这将为 Eclipse 添加一个“忽略”配置pom.xml
并使 Eclipse 满意。
现在用 F5 刷新项目。你完成了。
可能是 Eclipse 没有立即选择所有内容,因此您可能需要更新 Maven 项目(Alt+F5)。这就是它现在在我的工作区中的样子:
![Eclipse 工作区中的教程项目](https://i.stack.imgur.com/i4Cf0.png)
没有错误,一切就绪。干净整洁。
如果您的数据库设置正确(在 中persistence.properties
),并且您已经生成了往返测试,则可以直接执行它(RoundtripTest > Run As > JUnit Test)。这将启动实体管理器,加载 XML,将其保存到数据库,将其加载回来并与原始文件进行比较。
现在我们完成了。
我上面描述的 Maven 项目的导入也绝不是 Hyperjaxb3 特定的。
不,请让我解决您的“逐步”列表:
1.) 下载 zip 2.) 导航到 cmd.exe 中的文件夹 3.) 运行 mvn clean install
行。
4.)在eclipse中创建新的maven项目
为什么是新的?
5.) 将以下内容添加到 pom.xml
不工作。hbm2ddl
你必须像我一样找出正确的配置。这不是 Hyperjaxb3 特定的。
6.) 在 Eclipse 中运行 Maven 更新项目
行。
7.) 创建目标/生成源/xjc 文件夹
不,目标下的所有内容都会生成,您永远不会在那里手动创建任何内容。
8.) 将hyperjaxb生成的文件导入target/generated-sources/xjc
我不明白你在这里的意思。您是否尝试手动复制文件?
9.) 在 eclipse 项目的其他地方创建一个 Main 类来运行测试代码
10.) 开始将教程的“使用 JAXB 和 JPA”部分的代码添加到 Main 类
我祝你好运并在你的项目中取得成功。