HibernateUtil.java
private static final SessionFactory sessionFactory = buildSessionFactory(); private static SessionFactory buildSessionFactory() { try { Configuration configuration = new Configuration(); configuration.configure(); ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); SessionFactory sessionFactory = configuration .buildSessionFactory(serviceRegistry); return sessionFactory; // return new Configuration().configure().buildSessionFactory( // new StandardServiceRegistryBuilder().build() ); } catch (Throwable ex) { // Make sure you log the exception, as it might be swallowed System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError(ex); } } public static SessionFactory getSessionFactory() { return sessionFactory; }
※註解的部分是官網的,就是會錯
※使用時和第3版一樣Session s = HibernateUtil.getSessionFactory().getCurrentSession();
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>4.3.11.Final</version> </dependency>
※只下載hibernate-core,3.x版在執行時,會出現找不到javassist的錯誤訊息,所以還得下載org.javassist,但第4版我一樣用maven,就直接有了,所以下載這個jar即可
其他測試程式如下:
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:@localhost:1521:orcl</property> <property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property> <property name="hibernate.connection.username">username</property> <property name="hibernate.connection.password">password</property> <property name="hibernate.show_sql">true</property> <property name="hibernate.format_sql">true</property> <!-- <property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property> --> <property name="hibernate.current_session_context_class">thread</property> <!-- <mapping resource="hbm/Dept.hbm.xml" /> --> <mapping class="vo.Dept" /> </session-factory> </hibernate-configuration>
Dept.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <!-- Generated 2016/1/24 ?U?? 07:30:42 by Hibernate Tools 4.3.1 --> <hibernate-mapping> <class name="vo.Dept" table="DEPT"> <id name="deptno" type="java.lang.Integer"> <column name="DEPTNO" /> <generator class="assigned" /> </id> <property name="dname" type="java.lang.String"> <column name="DNAME" /> </property> <property name="loc" type="java.lang.String"> <column name="LOC" /> </property> </class> </hibernate-mapping>
Dept.java
@Entity @Table public class Dept { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "XXX") @SequenceGenerator(name = "XXX", sequenceName = "DEPT_SEQ") private Integer deptno; private String dname; private String loc; // setter/getter... }
測試類
Session s = HibernateUtil.getSessionFactory().getCurrentSession(); Transaction tx = s.beginTransaction(); try { Query q = s.createQuery("from Dept"); @SuppressWarnings("unchecked") List<Dept> e = q.list(); for (Dept d : e) { System.out.println(d.getDeptno()); System.out.println(d.getDname()); System.out.println(d.getLoc()); System.out.println(); } } catch (Exception e) { tx.rollback(); System.err.println("例外錯誤!"); e.printStackTrace(); } finally { if (s.isOpen()) { s.close(); } }
※我有將開發工具Hibernate3.x的Hello World (使用Hibernate tools)(Hibernate3.x一)設定成4.3版了,但cfg.xml和hbm.xml的dtd還是3,都和Hibernate3.x一樣
※cfg的mapping resource對應hbm.xml; cfg的mapping class對應annotation都和Hibernate3.x一樣,擇一使用即可
沒有留言:
張貼留言