简单学会Hibernate对象持久化

开发 后端
Hibernate对象持久化类(persistent class)新实例化的对象是瞬时(Transient)的。 我们可通过将瞬时(Transient)对象与session关联而把它变为持久(Persistent)的。

Hibernate对象持久化技术如何实现呢?本文将教你如何更简单更加快速的学会Hibernate对象持久化技术。

Hibernate对象持久化类(persistent class)新实例化的对象是瞬时(Transient)的。 我们可通过将瞬时(Transient)对象与session关联而把它变为持久(Persistent)的。

  1. DomesticCat fritz = new DomesticCat();  
  2. fritz.setColor(Color.GINGER);  
  3. fritz.setSex('M');  
  4. fritz.setName("Fritz");  
  5. Long generatedId = (Long) sess.save(fritz); 

如果Cat的持久化标识(identifier)是generated类型的, 那么该标识(identifier)会自动在save()被调用时产生并分配给cat。 如果Cat的持久化标识(identifier)是assigned类型的,或是一个复合主键(composite key), 那么该标识(identifier)应当在调用save()之前手动赋予给cat。 你也可以按照EJB3 early draft中定义的语义,使用persist()替代save()。

此外,你可以用一个重载版本的save()方法。

  1. DomesticCat pk = new DomesticCat();  
  2. pk.setColor(Color.TABBY);  
  3. pk.setSex('F');  
  4. pk.setName("PK");  
  5. pk.setKittens( new HashSet() );  
  6. pk.addKitten(fritz);  
  7. sess.save( pk, new Long(1234) ); 

如果你持久化的对象有关联的对象(associated objects)(例如上例中的kittens集合) 那么对这些对象(译注:pk和kittens)进行持久化的顺序是任意的(也就是说可以先对kittens进行持久化也可以先对pk进行持久化), 除非你在外键列上有NOT NULL约束。 Hibernate不会违反外键约束,但是如果你用错误的顺序持久化对象(译注:在pk持久化之前持久化kitten),那么可能会违反NOT NULL约束。

通常你不会为这些细节烦心,因为你很可能会使用传播性Hibernate对象持久化(transitive persistence)功能自动保存相关联那些对象。 这样连违反NOT NULL约束的情况都不会出现了 - Hibernate会管好所有的事情。 传播性持久化(transitive persistence)将在本章稍后讨论。

【编辑推荐】

  1. 浅析Hibernate VO与PO区别
  2. Hibernate中merge()方法解析
  3. Hibernate中Criteria攻略详解
  4. 简述Hibernate 3中的XML持久性
  5. 解析Hibernate视图实例
责任编辑:仲衡 来源: javanb
相关推荐

2009-09-29 16:11:45

Hibernate实现

2009-09-23 17:00:07

Hibernate持久

2009-09-24 16:39:20

Hibernate传播

2009-09-28 15:50:53

Hibernate创建持久化Product

2009-09-29 16:46:01

创建Hibernate

2009-09-25 17:19:28

Hibernate持久

2009-09-25 09:30:33

Hibernate持久

2009-06-17 16:00:03

Hibernate自定

2024-02-04 09:05:52

持久态对象数据库

2009-09-21 17:46:34

Hibernate持久

2009-09-29 10:37:29

Hibernate持久

2009-09-29 10:57:25

设置Hibernate

2010-08-11 08:44:01

Flex对象

2024-05-28 10:08:05

2022-08-31 09:47:38

ORM缓存持久化

2009-09-27 09:55:38

Hibernate持久

2012-02-08 14:24:35

HibernateJava

2009-09-22 13:31:28

Hibernate C

2009-09-23 13:33:51

Hibernate属性

2009-09-27 13:00:56

Hibernate S
点赞
收藏

51CTO技术栈公众号