【问题标题】:Using Hibernate outside the context of Tomcat在 Tomcat 的上下文之外使用 Hibernate
【发布时间】:2011-02-02 07:03:29
【问题描述】:

有人使用 Hibernate 在纯 Java 应用程序(不是 Web 应用程序)中访问数据库吗?您的经历是怎样的,是否需要很长时间才能设置并开始使用?

【问题讨论】:

  • 为什么会有不同?或者您是在谈论数据库连接池本身(可能是容器管理的)?

标签: java hibernate web-applications tomcat orm


【解决方案1】:

Hibernate 可以在任何 Java 应用程序中以相同的设置时间使用。重要的是在类路径而不是 Web 应用程序类加载器中获取 jar。如果 jar 可以正常使用,其余的 API 不依赖于应用程序的类型。

【讨论】:

    【解决方案2】:

    做过几次

    如果它是一个独立的服务器端应用程序,我建议使用 Spring_hibernate。

    回答您的具体问题 - 这非常简单直接。花费的时间并不比网络应用程序花费的时间长

    【讨论】:

    • 我实际上更喜欢使用 Spring+Hibernate。
    【解决方案3】:

    我发现即使在使用纯 SQL(无映射)时它也非常有用,因为它比直接 JDBC 更好地处理查询参数和类型转换。

    这是一个简单的自包含 Hibernate 类,它假定一个名为 Person 的表具有 id 和 anme。只需定义 hibernate.cfg.xml 设置连接 url、驱动等;在类路径上设置 Hibernate jar;并运行它。

    诀窍肯定是在您的类路径中获取所有正确的 jar。如果您下载 Hibernate 发行版,从 3.3 开始,lib 文件夹中有一个自述文件,其中解释了每个 JAR 文件以及您在运行时是否需要它。

    @Entity
    @Table(name="PERSON")
    public class SimpleHibernate {
        @Id
        private Long id;
        private String name;
        public Long getId() {
            return id;
        }
        public void setId(Long id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
    
        public static void main(String[] args) {
            AnnotationConfiguration cfg = new AnnotationConfiguration();
            cfg.configure("/hibernate.cfg.xml");
            cfg.addAnnotatedClass(SimpleHibernate.class);
            SessionFactory sessionFactory = cfg.buildSessionFactory();
            Session session = sessionFactory.openSession();
            System.out.println(session.createQuery(
                 "select count(*) from SimpleHibernate").uniqueResult());
    }
    

    【讨论】:

      【解决方案4】:

      配置部分没有什么不同。只需使用 Hibernate 内置连接池即可。但是,会话管理可能与视图模式中的打开会话非常不同。但是如果没有关于您的应用程序的更多详细信息,就很难更精确。

      【讨论】:

        【解决方案5】:

        我在一些 Swing 应用中使用过休眠。

        它与在 web 应用程序中的使用非常相似,只是您无法使用过滤器来关闭 Session,并且您需要小心处理两个事务之间的持久对象。

        我发现在持久对象上保留引用并尝试在产生它的事务之后使用它更容易。在 webapp 中,事务通常在请求结束时结束。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-09-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-26
          • 2013-02-25
          • 1970-01-01
          相关资源
          最近更新 更多