5

是否有一个使用 mysql 的项目的骨架,一些 Eclipse/top 链接以 RESOURCE_LOCAL 作为连接类型?最好使用maven。我正在寻找它几个小时,即使是最简单的例子也无法运行。因此,如果您已准备好并运行它,请发布:-)。甚至只有这两个类这样简单的东西。


@Entity
public class Message implements Serializable{
    public Message() {}
    public Message(String s){
        this.s = s;
    }
    @Id
    String s;
    public String getS(){
        return s;
    }
}
public class App {
    static private EntityManagerFactory emf;
    static private EntityManager em;
    public static void main( String[] args ) {
        emf = Persistence.createEntityManagerFactory("persistence");
        em = emf.createEntityManager();
        Message m = new Message("abc");
        em.persist(m);
    }
}

4

1 回答 1

3

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&amp;nf=1&amp;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.xmlpastebin.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);
于 2010-05-16T18:00:08.283 回答