我已经粘贴了 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帮助器)
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; } }
文件hibernate.cfg.xml很好。在hibernate- configuration-3.0.dtd中,该版本仍然是3.0,这似乎令人困惑,但是事实就是如此。DTD未更新。也许您想使用以hibernate开头的名称,例如hibernate.show_sql代替show_sql。属性的名称可以从文档中找到。通常使用的DTD_location是http://www.hibernate.org/dtd/hibernate- configuration-3.0.dtd(vs ..sourceforge …),但是两者都应该起作用。
hibernate.show_sql
show_sql
http://www.hibernate.org/dtd/hibernate- configuration-3.0.dtd
从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规范中描述的实现。