Maven 具有 JPA 应用程序的原型,可从内部目录中获得
$ mvn 原型:生成
[INFO] 正在扫描项目...
[INFO] 搜索带有前缀的插件的存储库:'archetype'。
[信息] --------------------------------------------- -------------------------
[INFO] 构建 Maven 默认项目
[INFO] 任务段:[archetype:generate](聚合器样式)
[信息] --------------------------------------------- -------------------------
[INFO] 准备原型:生成
[INFO] 项目不需要目标 - 跳过
[INFO] 设置属性:classpath.resource.loader.class => 'org.codehaus.plexus.velocity.ContextClassLoaderResourceLoader'。
[INFO] 设置属性:velocimacro.messages.on => 'false'。
[INFO] 设置属性:resource.loader => 'classpath'。
[INFO] 设置属性:resource.manager.logwhenfound => 'false'。
[信息] [原型:生成{执行:默认-cli}]
[INFO] 在交互模式下生成项目
[INFO] 未定义原型。使用 maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0)
选择原型:
...
23:内部-> jpa-maven-archetype(JPA 应用程序)
...
选择一个数字:(1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23 /24/25/26/27/28/29/30/31/32/33/34/35/36/37/38/39/40/41) 15: :
或者更直接:
mvn archetype:generate \
-DgroupId=com.mycompany.myproject \
-DartifactId=my-project-domain \
-DpackageName=com.mycompany.myproject.domain \
-DarchetypeGroupId=com.rfc.maven.archetypes \
-DarchetypeArtifactId=jpa-maven-archetype \
-DarchetypeVersion=1.0.0 \
-DremoteRepositories=http://maven.rodcoffin.com/repo \
-DinteractiveMode=false
这将使用 Hibernate、HSQLDB 和 DbUnit 测试生成一个不错的项目。现在,cd
进入创建的目录进行一些更改。
首先,编辑pom.xml
. 删除 Hibernate 相关的工件并用 EclipseLink 替换它们(您需要一个额外的存储库):
<project>
...
<repositories>
<repository>
<id>eclipselink</id>
<url>http://www.eclipse.org/downloads/download.php?r=1&nf=1&file=/rt/eclipselink/maven.repo/</url>
</repository>
</repositories>
<dependencies>
<!-- See http://wiki.eclipse.org/EclipseLink/Maven -->
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<version>2.0.0</version>
</dependency>
<!-- optional - only needed if you are using JPA outside of a Java EE container-->
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>javax.persistence</artifactId>
<version>2.0.0</version>
<scope>provided</scope>
</dependency>
...
</dependencies>
...
</project>
然后修改persistence.xml
(注意下面有2个持久化单元,填充的一个在测试时使用):
<?xml version="1.0"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="my-project-domain"/>
<persistence-unit name="my-project-domain-test" transaction-type="RESOURCE_LOCAL">
<class>com.mycompany.myproject.User</class>
<properties>
<property name="eclipselink.target-database" value="HSQL"/>
<property name="javax.persistence.jdbc.driver" value="org.hsqldb.jdbcDriver"/>
<property name="javax.persistence.jdbc.user" value="sa"/>
<property name="javax.persistence.jdbc.password" value=""/>
<property name="javax.persistence.jdbc.url" value="jdbc:hsqldb:mem:my-project-test"/>
<property name="eclipselink.ddl-generation" value="create-tables"/>
</properties>
</persistence-unit>
</persistence>
就这样。我已经pom.xml
在pastebin.com上发布了修改后的内容。要使用 MySQL,请将 JDBC 驱动程序添加为依赖项pom.xml
并复制 EclipseLink 配置。这应该很容易,并留给读者作为练习:) 如果出现阻塞问题,请发表评论,我会看看是否可以提供帮助。
如果您想再次通过测试,则必须替换以下行UserTest.java
:
HibernateEntityManager em = (HibernateEntityManager) emf.createEntityManager();
DbUnitDataLoader loader = new DbUnitDataLoader(testData, em.getSession().connection());
经过
EntityManager em = emf.createEntityManager();
Connection conn = em.unwrap(java.sql.Connection.class);
conn.setAutoCommit(true);
DbUnitDataLoader loader = new DbUnitDataLoader(testData, conn);