Знаток Mysql jpa скелет

существует ли каркас для проекта с помощью mysql, некоторой ссылки затмения/вершины с RESOURCE_LOCAL как тип соединения? Предпочтительно использование знатока. Я ищу его в течение многих часов и не могу получить выполнение даже самый простой exaple. Таким образом, если у Вас был он готовый и выполнение, сообщение :-). Даже что-то столь же простое как эти два класса только.


@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);
    }
}

5
задан Pascal Thivent 16 May 2010 в 18:00
поделиться

1 ответ

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&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.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);
3
ответ дан 15 December 2019 в 06:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: