私は通常、WebアプリケーションでHibernateとSpringを使用するため、構成にDIとMavenを使用します。今度は、MavenまたはSpringを使用しないデスクトップ/スイングアプリケーションでHibernateを使用したいと思いますが、次のことについて疑問に思っていました。
- どの瓶が必要ですか?
- 休止状態を構成する方法、およびサンプルクエリを作成する方法は?
アドバイスしてください、ありがとう。
私は通常、WebアプリケーションでHibernateとSpringを使用するため、構成にDIとMavenを使用します。今度は、MavenまたはSpringを使用しないデスクトップ/スイングアプリケーションでHibernateを使用したいと思いますが、次のことについて疑問に思っていました。
アドバイスしてください、ありがとう。
私はSpringについて知らないので、本当に使いたい場合は私の回答を少し更新する必要があります(たとえば、Springにはエンティティマネージャーを初期化するための独自のメカニズムがあります).
依存関係
これは、 JPA を介して Hibernate を使用する (つまり、EntityManager を使用する) 私の最近のデスクトップ プロジェクトに使用した構成です (一部のバージョンはそれ以降進化している可能性があります)。
org.hibernate:hibernate:3.2.7.ga
org.hibernate:hibernate-annotations:3.4.0.GA
org.hibernate:hibernate-entitymanager:3.4.0.GA
以下も必要になる場合があります。
commons-collections:commons-collections:3.2.1
asm:asm:3.2
cglib:cglib:2.2
dom4j:dom4j:1.6.1
antlr:antlr:2.7.7
c3p0:c3p0:0.9.1.2
それらはすべてmaven centralにあります。
構成
META-INF フォルダーに有効な persistence.xml が必要です。
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
<persistence-unit name="NONJTAPersistenceUnit" transaction-type="RESOURCE_LOCAL">
<class>com.yourpackage.EntityClass1</class>
<class>com.yourpackage.EntityClass2</class>
<class>com.yourpackage.EntityClass3</class>
<properties>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/>
<property name="hibernate.connection.url" value="jdbc:hsqldb:hsql://hostXYZ/yourdatabase"/>
<property name="hibernate.connection.username" value="sa"/>
<property name="hibernate.connection.password" value=""/>
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
</persistence>
独自のデータベース情報/ドライバーで更新します。
使用法
上記のpersitence.xmlファイルに登録されているEntityClass1、EntityClass2、EntityClass3に対して、通常の方法で Entity クラスを作成します。
次に、EntityManagerについて...EE環境にないため、EntityManagerFactotyからインスタンスを取得する必要があります。
EntityManagerFactory emf = Persistence.createEntityManagerFactory("NONJTAPersistenceUnit");
EntityManager em = emf.createEntityManager();
(繰り返しますが、Spring はそれを取得する別の方法を提供する場合があります。ドキュメントを確認してください)。
そこから、たとえば永続操作を次のように実行できます。
em.getTransaction().begin();
em.persist(entity);
em.getTransaction().commit();
すべてを Spring に準拠させるには、ドキュメントを少し読む必要があります。
編集
サンプルクエリ:
Query query = em.createQuery("select e from EntityClass1 where e.name = :name");
query.setParameter(:name, "foo");
List results = query.getResultList();
編集
更新されたバージョン:
hibernate-core-3.5.1-Final
hibernate-entitymanager-3.5.1-Final
hibernate-jpa-2.0-api-1.0.0.Final
hibernate-annotations-3.5.1-Final
hibernate-commons-annotations-3.2.0.Final
dom4j-1.6.1
slf4j-api-1.6.4
slf4j-log4j12-1.6.4
...
Spring/Hibernate を構成に使用する StandAlone アプリケーションと WebApp の間に違いはありません。hibernate にも同じ JAR ファイルが必要です。春には、Web 指向の JAR を廃止できますが、それ以外の場合はすべてのコアが必要です。
JAR を「/lib」フォルダーに配置し、Maven ビルドの一部として Manifest.mf で指定して、クラスパスに追加します。
コマンド ラインで Java アプリケーションをブートストラップするには、ApplciationContext を呼び出してロードし、次のように Main クラスから開始します...
public static void main(String[] args) {
...
String[] contextXml = new String[]{ "resources/spring-context.xml", "resources/spring-db.xml" };
ApplicationContext ctx = new ClassPathXmlApplicationContext(contextXml);
// invoke your business logic
MyBusinessService bean = getBean(MyBusinessService.class);
bean.doSomething();
...
}
これがDAOの例です
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;
@Repository
public class MyDaoHibernate extends HibernateDaoSupport {
/*** Functional methods ***/
public void save(MyValueObject vo) throws DatabaseException {
getHibernateTemplate().saveOrUpdate(vo);
}
public MyValueObject get(Long id) throws DatabaseException {
return getHibernateTemplate().get(MyValueObject.class, id);
}
/*** Getter & Setters ***/
@Autowired
public void initSessionFactory(SessionFactory sessionFactory) {
this.setSessionFactory(sessionFactory);
}
}
[編集]
Yanflea によって提起された良い点は、データベース接続プーリング ライブラリを使用することをお勧めします。これは、Web アプリのように提供されていないためです。以下をダウンロードcommons-dbcp.jar
して、Spring 構成に追加します...
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.sybase.jdbc2.jdbc.SybDriver" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
SessionFactory は、任意の (Web ベースまたはデスクトップ) アプリケーションで Hibernate を使用するための最良の方法です。http://sourceforge.net/projects/hibernate/files/hibernate4/から最新の休止状態リリース バンドルをダウンロードするだけです。libフォルダーの下に、必要なフォルダーがあります。これらの jar はすべて hibernate プロジェクトに必須であるため、すべて含めます。次に、SessionFactory のシングルトン インスタンスを提供するクラスを定義します。このインスタンスは、Configuration のインスタンスで buildSessionFactory() メソッドを使用して取得できます (hibernate 構成ファイルを読み取って処理できるクラスです)。ファイル hibernate.cfg.xml ですべての接続とその他のパラメーターを定義する必要があります (必要な他の名前を使用することもできます)。詳細については、http://javabrains.koushik.org/にアクセスしてください。. そこの Hibernate セクションで、最初のいくつかのチュートリアルを実行してください。そこでとても丁寧に説明されています。