(1)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.username">root</property>
<property name="connection.url">
jdbc:mysql://localhost:3306/test
</property>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="connection.password">111</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="show_sql">true</property>
<mapping resource="test/Person.hbm.xml" />
</session-factory>
</hibernate-configuration>
(2)Person.java
package test;
public class Person implements java.io.Serializable {
private int personID;
private String firstName;
private String lastName;
private int age;
public int getPersonID() {
return personID;
}
public void setPersonID(int personID) {
this.personID = personID;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
(3)Person.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="test.Person" table="person" catalog="test">
<id name="personID" type="java.lang.Integer">
<column name="personID" />
<generator class="identity" />
</id>
<property name="firstName" type="java.lang.String">
<column name="FirstName" length="15" />
</property>
<property name="lastName" type="java.lang.String">
<column name="LastName" length="15" />
</property>
<property name="age" type="java.lang.Integer">
<column name="Age" />
</property>
</class>
</hibernate-mapping>
(4)测试hibernate持久化操作
package test;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class Test {
public static void main(String[] args)
{
Configuration cfg = new Configuration().configure("hibernate.cfg.xml");
SessionFactory sf = cfg.buildSessionFactory();
Person p = new Person();
p.setFirstName("test");
p.setLastName("001");
p.setAge(111);
Session session =sf.openSession();
Transaction tx = null;
try
{
tx = session.beginTransaction();
session.save(p);
p.setAge(42);
p.setFirstName("testfirst");
p.setLastName("testlast");
List persons = session.createQuery("from Person").list();
System.out.println(persons.size());
for(int i=0;i<persons.size();i++)
{
Person p1 = (Person)persons.get(i);
System.out.println(p1.getPersonID()+"\t"+p1.getFirstName()+"\t"+p1.getLastName()+"\t"+p1.getAge()+"\t\n");
}
}catch(Exception e)
{
tx.commit();
}
session.close();
}
}
!!!!!!!!!---(1)不明白的是执行了session.save(p)这句代码后,为什么数据没有同步到数据库????????????
!!!!!!!!!----(2)当运行整个java文件时,控制台读取到了数据库中的所有数据,而session.save(p)中的对象p数据库中不存在,但还是读取出来了
eg:
Hibernate: insert into test.person (FirstName, LastName, Age) values (?, ?, ?)
Hibernate: update test.person set FirstName=?, LastName=?, Age=? where personID=?
Hibernate: select person0_.personID as personID0_, person0_.FirstName as FirstName0_, person0_.LastName as LastName0_, person0_.Age as Age0_ from test.person person0_
4
1 yang shide 112
2 sdfsdf fsdf 4555
3 dfg dfg 545
21 testfirst testlast 42
!!!!!!!-----(3)为什么我每次运行这个测试类,想要save的这个对象的id都一直在递增---------------------?????????
希望大哥们,帮我解释一下,感觉很奇怪的,这问题想不明白..
猜想可能把这数据存到内存里去了 ,只作为一个瞬时对象..不过貌似不可能吧??
居然在异常处理里 tx.commit(); ??
这行代码应该放在 try 段的最后,异常处理里应该是 tx.rollback();
######lll
######异常里能commit什么到数据库,自增的空行。
######呃,介个问题。
hibernate 中事务操作。
建议楼主还是看看hibernate对象的三种状态吧。官方文档就有。
######
居然在异常处理里 tx.commit(); ??
这行代码应该放在 try 段的最后,异常处理里应该是 tx.rollback();
嘿嘿 谢谢大哥提示 原来事务的处理弄错了 不懂事务的目的呀 欠缺理解
######
呃,介个问题。
hibernate 中事务操作。
建议楼主还是看看hibernate对象的三种状态吧。官方文档就有。
谢谢大哥提醒 我对三种状态倒是理解了 就是对事务缺乏理解
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。