hibernate with embedded derby in standalone applicationを使用したいのですが、いくつか質問があります:
よろしければ、このアプローチの良いチュートリアルを提案していただければ、よろしくお願いします。
プロジェクトのモデルクラスの1つをテストするためにHibernateでApacheDerbyを使用しています(それらのequals、hashCode実装、クエリなど)。 MySQLは本番データベースとして使用されます。 [〜#〜] hsqldb [〜#〜] の代わりにDerbyを選択します。これは、HibernateおよびHSQLDBとの非互換性を経験したためです。つまり、エンティティ(名前、スキーマ、キー)とそれらの関係HibernateはHSQLDBでデータベーススキーマを作成できませんでしたが、Derbyでは作成できました。そうは言っても、多分私は何かを台無しにした。また、非互換性も解決できたはずです。
とにかく、これが私のテストで使用するものです(runtime依存関係としてDerbyが含まれるようにpom.xml
を変更しました単一のテストを実行して、それが機能していることを確認します)。
pom.xml
<dependencies>
...
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>3.6.8.Final</version>
</dependency>
<dependency>
<groupId>org.Apache.derby</groupId>
<artifactId>derby</artifactId>
<version>10.8.2.2</version>
<scope>runtime</scope>
</dependency>
<!--
an slf4j implementation is needed by
hibernate so that it could log its *stuff*
-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.6.4</version>
<scope>runtime</scope>
</dependency>
...
</dependencies>
persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<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="test">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>Test</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="org.Apache.derby.jdbc.EmbeddedDriver"/>
<!--
if you don't have a database already created
append ;create=true to end of the jdbc url
-->
<property name="javax.persistence.jdbc.url" value="jdbc:derby:test"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value="root"/>
<!--
if you just created the database, maybe
you want hibernate to create a schema for you
<property name="hibernate.hbm2ddl.auto" value="create"/>
-->
</properties>
</persistence-unit>
</persistence>
Test
エンティティ@Entity
@Table(name = "test")
public class Test {
@Id
public int id;
@Basic
public String data;
}
EntityManagerFactory emf = Persistence.createEntityManagerFactory("test");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
Test test = em.find(Test.class, 1);
if (test == null) {
test = new Test();
test.id = 1;
test.data = "a";
tx.begin();
em.persist(test);
tx.commit();
}
System.out.format("Test{id=%s, data=%s}\n", test.id, test.data);
em.close();
emf.close();