今天抽空看了hibernate官方文档,拿到目前最新版本4.3.8,按照官方文档调试,遇到一些问题。
在网上找答案的时候,资料很少,搜了好久,一直没找到原因。
然后,我就试着将版本降到3.6.10版本,这样一来资料多了很多,解决后,将版本升级到4.3.8,OK!
用 hibernate 3.6.10版 实现简单的demo
结构图如下:
1.JAR包
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>3.6.10.Final</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.34</version> </dependency> <dependency> <groupId>org.javassist</groupId> <artifactId>javassist</artifactId> <version>3.18.1-GA</version> </dependency> </dependencies>
2.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="connection.url">jdbc:mysql://ip:端口/数据库</property> <property name="connection.username">用户名</property> <property name="connection.password">密码</property> <property name="connection.driver_class"> com.mysql.jdbc.Driver </property> <property name="dialect"> org.hibernate.dialect.MySQLDialect </property> <property name="hibernate.show_sql">true</property> <mapping resource="org/hibernate/po/Dept.hbm.xml" /> </session-factory> </hibernate-configuration>
3.*.hbm.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="org.hibernate.po.Dept" table="ROMS_SYS_DEPT"> <id name="deptId" type="java.lang.String" column="DEPT_ID"/> <property name="deptName" type="java.lang.String" column="DEPT_NAME"/> <property name="deptPid" type="java.lang.String" column="PDEPT_ID"/> </class> </hibernate-mapping>
4.PO类
public class Dept {
private String deptId;
private String deptName;
private String deptPid;
// getter,setter 省略
}
5.HibernateUtil 类
public class HibernateUtil {
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
SessionFactory sessionFactory = null;
try {
Configuration conf = new Configuration();
conf.configure();
// 装载指定的配置文件
// conf.configure(new File("abc.xml"));
// 创建 SessionFactory
sessionFactory = conf.buildSessionFactory();
} catch (Throwable ex) {
System.err.println("Initial SessionFactory creation failed:" + ex);
throw new ExceptionInInitializerError(ex);
}
return sessionFactory;
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
6.Manager处理类
public class DeptManager {
public static void main(String[] args) {
DeptManager mgr = new DeptManager();
mgr.createAndStoreEvent("My Event", new Date());
// HibernateUtil.getSessionFactory().close();
}
private void createAndStoreEvent(String title, Date theDate) {
Dept dept = new Dept();
dept.setDeptId("1111");
dept.setDeptName("测试部门");
dept.setDeptPid("000");
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = session.getTransaction();
// 开启事务
tx.begin();
session.save(dept);
tx.commit();
session.close();
}
}
7.sql
DROP TABLE IF EXISTS `ROMS_SYS_DEPT`;
CREATE TABLE `ROMS_SYS_DEPT` (
`DEPT_ID` varchar(32) CHARACTER SET utf8 NOT NULL DEFAULT '',
`DEPT_NAME` varchar(32) CHARACTER SET utf8 DEFAULT NULL,
`PDEPT_ID` varchar(32) CHARACTER SET utf8 DEFAULT NULL,
PRIMARY KEY (`DEPT_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
4.3.8 版本调整的文件
1.HibernateUtil
public class HibernateUtil {
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
SessionFactory sessionFactory = null;
try {
Configuration configuration = new Configuration()
.configure("hibernate.cfg.xml");
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
.applySettings(configuration.getProperties()).build();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
} catch (Throwable ex) {
System.err.println("Initial SessionFactory creation failed:" + ex);
throw new ExceptionInInitializerError(ex);
}
return sessionFactory;
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
2.DeptManager
public class DeptManager {
public static void main(String[] args) {
DeptManager mgr = new DeptManager();
// if (args[0].equals("store")) {
// mgr.createAndStoreEvent("My Event", new Date());
// }
mgr.createAndStoreEvent("My Event", new Date());
HibernateUtil.getSessionFactory().close();
}
private void createAndStoreEvent(String title, Date theDate) {
Dept dept = new Dept();
dept.setDeptId("1111");
dept.setDeptName("测试部门");
dept.setDeptPid("000");
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
session.save(dept);
session.getTransaction().commit();
}
}