Java 在Tomcat上下文之外使用Hibernate

Java 在Tomcat上下文之外使用Hibernate,java,hibernate,web-applications,tomcat,orm,Java,Hibernate,Web Applications,Tomcat,Orm,有人使用Hibernate在纯java应用程序(不是web应用程序)中访问DB吗?您的体验是什么样的?设置和开始运行是否花费了很长时间?在任何java应用程序中,Hibernate都可以使用同等的设置时间。重要的是在类路径中获取jar,而不是web应用程序类加载器。如果JAR正确可用,则API的其余部分并不取决于应用程序的类型。多次这样做 如果它是一个独立的服务器端应用程序,我建议使用Spring\u hibernate 回答你的具体问题——非常简单和直截了当。我发现即使在使用纯SQL(无映射)

有人使用Hibernate在纯java应用程序(不是web应用程序)中访问DB吗?您的体验是什么样的?设置和开始运行是否花费了很长时间?

在任何java应用程序中,Hibernate都可以使用同等的设置时间。重要的是在类路径中获取jar,而不是web应用程序类加载器。如果JAR正确可用,则API的其余部分并不取决于应用程序的类型。

多次这样做

如果它是一个独立的服务器端应用程序,我建议使用Spring\u hibernate


回答你的具体问题——非常简单和直截了当。我发现即使在使用纯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());
}

配置部分没有那么大的不同。只要使用Hibernate内置的连接池就可以了。但是,会话管理可能与视图中的开放会话模式非常不同。但是如果没有关于你的应用程序的更多细节,就很难做到更精确

我在一些Swing应用程序中使用了hibernate

它与webapp中的用法非常相似,只是您不可能使用过滤器来关闭会话,并且您需要小心处理两个事务之间的持久对象


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

为什么会有什么不同?或者说DB连接池本身(可以是容器管理的)?实际上我更喜欢使用Spring+Hibernate。