『2005-05-30 晴 30摄氏度 星期一』
上周六到学校体育馆痛痛快快的打了一上午羽毛球,由于常时间没锻炼,两个小时下来,胳膊累得不会动了,甚至连笑都嫌腮帮子都疼,然后坐车回去,在车上小憩 了一会,到家后吃点饭立刻精神百倍,想这上周都还没做成什么事,怪对不起自己的,马上翻开《Hibernate Reference》,因上周五也看了这本书,但按树上的例子,我缺没做成功,心里很愤恨,是自己不认真?还是书上的例子有问题?...郁闷了一会,决定 仔仔细细把书看一遍。
看了半个小时,了解了其体系结构、OR映射基础、Hibernate的SQL使用方法,然后上机测试还是那个Employee表,唉!错误还是”涛声依旧“。
冲了把凉......
再次翻开书,惊奇的发现了一句话:”每个持久化类都应该有一个标志属性,这个属性被用来区分持久化对象。“看到这句话,我觉得象找到了救命稻草一样,直觉告诉我这句话将会解答我失败的原因。于是开始想,
既然Hibernate是把shuj库中的数据做为一个java对象来在程序里使用,那它是如何做OR映射的那?表名和类名映射?既然这样,类名又是通过 什么和数据库中的表相关联的那?他们之间肯定有关系,可能就像若干个表中通过主键、外键将几个表关联起来一样。(嗯,有点头绪了)再往下看:” Hibernate附带了几种不同的标识生成器,...“,标识生成器?重要线索!可能刚才的疑问就是没搞清楚这个标识生成器的原因!结合着数据表主键、 外键的相关知识,我初步判断我写的主方法没错,错误出就出在数据表上!
检查数据表,尝试给employee加一个主键,重新建表:
CREATE TABLE Employee(ID INTEGER PRIMARY KEY,Name VARCHAR,Sex VARCHAR,Phone VARCHAR,Email VARCHAR,Address VARCHAR);,重新在Eclipse中重复new的动作,产生Hibernate 配置文件和mapping file,以及Hibernate Sync生产的包。在EmployeeDAO中save一个employee对象,系统报了一个不同的错误,是jndi的错误,虽然有错,但我还是很高 兴,因为我知道刚才的推断是正确的!
然后我有查了一些质料,找到了问题所在,我不是通过jndi绑定数据源的,因此我不需要
<property name="hibernate.transaction.factory_class">net.sf.hibernate.transaction.JTATransactionFactory</property>
<property name="jta.UserTransaction">java:comp/UserTransaction</property> 这两个属性的定义,在hibernate.cfg.xml中删除这两个属性的定义重新运行,ok!该对象终于存到db中了。
主方法内容如下:
public class EmployeeDAO extends BaseEmployeeDAO {
public static void main(String[] args){
try{
_RootDAO.initialize();
EmployeeDAO empDAO = new EmployeeDAO();
com.leeyoung.Department dep = new Department(0);
com.leeyoung.Employee emp = new com.leeyoung.Employee();
emp.setAddress("武昌区武太闸涂家沟社区");
emp.setEmail("imchaoyang@163.com");
emp.setId(2);
emp.setDepartmentid(dep);
emp.setName("chaoyang");
emp.setPhone("13871443453");
emp.setSex("male");
empDAO.save(emp);
System.out.println("ok!");
}catch(Exception ex){
ex.printStackTrace();
}
}
}
数据库中结果如下:
Hibernate初探(一)
最新推荐文章于 2024-09-24 10:50:41 发布