Maven имеет архетип для JPA-приложения, доступный во внутреннем каталоге
$ mvn archetype:generate
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'archetype'.
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO] task-segment: [archetype:generate] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] Preparing archetype:generate
[INFO] No goals needed for project - skipping
[INFO] Setting property: classpath.resource.loader.class => 'org.codehaus.plexus.velocity.ContextClassLoaderResourceLoader'.
[INFO] Setting property: velocimacro.messages.on => 'false'.
[INFO] Setting property: resource.loader => 'classpath'.
[INFO] Setting property: resource.manager.logwhenfound => 'false'.
[INFO] [archetype:generate {execution: default-cli}]
[INFO] Generating project in Interactive mode
[INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0)
Choose archetype:
...
23: internal -> jpa-maven-archetype (JPA application)
...
Choose a number: (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);