5

私は通常、WebアプリケーションでHibernateとSpringを使用するため、構成にDIとMavenを使用します。今度は、MavenまたはSpringを使用しないデスクトップ/スイングアプリケーションでHibernateを使用したいと思いますが、次のことについて疑問に思っていました。

  1. どの瓶が必要ですか?
  2. 休止状態を構成する方法、およびサンプルクエリを作成する方法は?

アドバイスしてください、ありがとう。

4

3 に答える 3

6

私は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ファイルに登録されているEntityClass1EntityClass2EntityClass3に対して、通常の方法で 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
...
于 2012-05-14T13:02:51.817 に答える
1

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> 
于 2012-05-14T12:41:32.443 に答える
0

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 セクションで、最初のいくつかのチュートリアルを実行してください。そこでとても丁寧に説明されています。

于 2012-05-14T17:29:52.940 に答える