API 或代码:Hibernate 3 和 4 之间的区别?
Posted
技术标签:
【中文标题】API 或代码:Hibernate 3 和 4 之间的区别?【英文标题】:API or code : Difference between Hibernate 3 and 4? 【发布时间】:2012-07-16 07:36:06 【问题描述】:我已经粘贴了 Hibernate 3 配置文件、SessionFactory 类来配置这个 config.xml 和一个带有 JPA 注释的 bean。我想知道如果我使用的是 Hibernate 4,那么代码级别的上下文会发生什么变化,或者外行语言的非常广泛的差异或进步。
hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@192.168.2.144:1521:xe</property>
<property name="hibernate.connection.username">prateek</property>
<property name="connection.password">prateek</property>
<property name="connection.pool_size">1</property>
<property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">create</property>
<mapping class="com.vaannila.domain.User1" />
</session-factory>
</hibernate-configuration>
建立连接的静态java类(SessionFactory Helper)
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class SessionFactoryHelper
private static final SessionFactory sessionFactory;
static
try
/*
* Build a SessionFactory object from session-factory configuration
* defined in the hibernate.cfg.xml file. In this file we register
* the JDBC connection information, connection pool, the hibernate
* dialect that we used and the mapping to our hbm.xml file for each
* POJO (Plain Old Java Object).
*
*/
sessionFactory = new Configuration().configure().buildSessionFactory();
catch (Throwable e)
System.err.println("Error in creating SessionFactory object."
+ e.getMessage());
throw new ExceptionInInitializerError(e);
/*
* A static method for other application to get SessionFactory object
* initialized in this helper class.
*
*/
public static SessionFactory getSessionFactory()
return sessionFactory;
豆类
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="USER1")
public class User1
private Long id;
private String name;
private String gender;
private String country;
private String aboutYou;
private Boolean mailingList;
@Id
@GeneratedValue
@Column(name="USER_ID")
public Long getId()
return id;
public void setId(Long id)
this.id = id;
@Column(name="USER_NAME")
public String getName()
return name;
public void setName(String name)
this.name = name;
@Column(name="USER_GENDER")
public String getGender()
return gender;
public void setGender(String gender)
this.gender = gender;
@Column(name="USER_COUNTRY")
public String getCountry()
return country;
public void setCountry(String country)
this.country = country;
@Column(name="USER_ABOUT_YOU")
public String getAboutYou()
return aboutYou;
public void setAboutYou(String aboutYou)
this.aboutYou = aboutYou;
@Column(name="USER_MAILING_LIST")
public Boolean getMailingList()
return mailingList;
public void setMailingList(Boolean mailingList)
this.mailingList = mailingList;
【问题讨论】:
请不要投反对票,这是一个重要的问题,我需要在我的项目中进行技术变革。 不评论背后的原因就投反对票是没有建设性的 【参考方案1】:hibernate.cfg.xml
文件 hibernate.cfg.xml 很好。 hibernate-configuration-3.0.dtd 中的版本仍然是 3.0 可能看起来令人困惑,但事实就是如此。 DTD 未更新。也许您想使用带有 hibernate 前缀的名称,例如 hibernate.show_sql
而不是 show_sql
。可以从documentation 找到属性名称。通常使用的 DTD_location 是 http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd
(相对于 ..sourceforge...),但两者都应该工作。
构建会话工厂
正如您从API 中看到的,buildSessionFactory 已被弃用。这就是它在 4.x 中的构建方式:
Configuration conf = new Configuration();
conf.configure();
serviceRegistry = new ServiceRegistryBuilder().applySettings(conf.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
在文档中的许多地方,这仍然不是最新的。
注释实体
通常不需要对 bean 类中的映射进行任何更改。原因是您使用的是普通的 JPA 映射,而且 Hibernate 3 是 JPA 规范中描述的实现。
【讨论】:
以上是关于API 或代码:Hibernate 3 和 4 之间的区别?的主要内容,如果未能解决你的问题,请参考以下文章
Hibernate初探之单表映射——通过Hibernate API编写访问数据库的代码
JAVAWEB开发之Hibernate详解——Hibernate的框架概述开发流程CURD操作和核心配置与API以及Hibernate日志的使用