如何在eclipse中的独立(Swing)应用程序中配置hibernate?

时间:2012-05-14 11:37:18

标签: java eclipse hibernate desktop-application

我通常在Web应用程序中使用带有spring的hibernate,所以我使用DI和maven进行配置,现在我想在不使用maven或spring的桌面/ swing应用程序中使用hibernate,我想知道以下内容:< / p>

  1. 我需要什么罐子?
  2. 如何配置hibernate,以及如何进行示例查询?
  3. 请告知,谢谢。

3 个答案:

答案 0 :(得分:6)

我不知道Spring,所以如果你真的想要使用它,你必须稍微更新我的答案(例如Spring有自己的机制来初始化实体管理器)。

<强>依赖关系

这是我用于最近的桌面项目的配置(某些版本可能已经发展),使用Hibernate而不是JPA (即它使用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 的常用方法创建实体类以上。

然后,对于 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
...

答案 1 :(得分:1)

WebApp和使用Spring / Hibernate进行配置的StandAlone应用程序之间没有区别。你需要为hibernate提供相同的JAR文件。对于spring,你可以取消面向Web的JAR,但除此之外所有核心内容都是必需的。

将JAR放在“/ lib”文件夹中,并通过在Manifest.mf中指定它作为Maven构建的一部分将其添加到类路径中。

要在命令行上引导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> 

答案 2 :(得分:0)

SessionFactory是在任何(基于Web或桌面)应用程序中使用Hibernate的最佳方式。 只需从http://sourceforge.net/projects/hibernate/files/hibernate4/下载最新的hibernate发行包。在lib文件夹下有一个必需的文件夹。包括所有这些罐子,因为它们对于hibernate项目都是强制性的。 然后定义一个类,它将为您提供SessionFactory的单例实例。您可以在Configuration实例上使用buildSessionFactory()方法获取此实例(它是一个可以读取和处理hibernate配置文件的类)。您必须在文件hibernate.cfg.xml中定义所有连接和其他参数(您还可以使用任何其他名称)。 有关详细信息,请转到http://javabrains.koushik.org/。在Hibernate部分,只需要阅读前几个教程。它的解释非常好。

相关问题