Hibernate
文章平均质量分 79
Owen William
这个作者很懒,什么都没留下…
展开
-
认识Hibernate
1. Hibernate的体系结构 Hibernate的持久化解决方案是将用户从原始的JDBC访问中释放出来,用户无须关注底层的JDBC操作,而是以面向对象的方式进行持久层操作。底层数据库连接的获取、数据访问的实现、事务控制都无须用户关心。这是一种“全面解决”的体系结构方案,将应用层从底层JDBC/JTA API中抽取出来。通过配置文件管理底层的JDBC连接,让Hibernate解决持久化访问的原创 2016-03-06 17:59:30 · 533 阅读 · 0 评论 -
Hibernate的双向1-1关联(七)
1. 基于外键的双向1-1关联 对于基于外键的双向1-1关联,外键可以存放在任意一端。只要选择了任意一端来作为增加外键后,该表就变成了主表,另一张表就是从表。主表不应该有关联关系的控制,所以在@OneToOne注解时,加上mappedBy属性(为了不增加额外的update语句,下降性能)。下面,我们选择Person为主表。 @Entity @Table(name="person_inf") p原创 2016-03-08 23:55:27 · 329 阅读 · 0 评论 -
Hibernate的双向N-N关联(六)
双向N-N关联需要两端都使用Set集合属性,两端都增加对集合属性的访问。双向N-N关联,只能采用连接表来建立两个实体之间的关联关系。下面是Person类。 @Entity @Table(name="person_inf") public class Person { // 标识属性 @Id @Column(name="person_id") @GeneratedValue(strategy原创 2016-03-08 23:52:58 · 326 阅读 · 0 评论 -
Hibernate的双向1-N关联(五)
对于1-N关联,Hibernate推荐使用双向关联,而且不要让1的一端控制关联关系,而使用N的一端控制关联关系。双向的1-N关联与N-1关联是完全相同的两种情形,两端都需要增加对关联属性的访问,N的一端增加引用到关联实体的属性,1的一端增加集合属性,集合元素为关联关联实体。 1. 无连接表的双向1-N关联 无连接表的双向1-N关联,N的一端需要增加@ManyToOne注解来修饰代表关联实体的原创 2016-03-08 23:48:11 · 325 阅读 · 0 评论 -
Hibernate的单向N-N关联(四)
N-N关联需要使用@ManyToMany注解来修饰代表关联实体的集合。同时,N-N关联必须使用连接表。下面是单向N-N关联的Person类。 @Entity @Table(name="person_inf") public class Person { // 标识属性 @Id @Column(name="person_id") @GeneratedValue(strategy=Genera原创 2016-03-08 23:44:54 · 304 阅读 · 0 评论 -
Hibernate的单向N-1关联(一)
1. 无连接表的N-1关联 对于无连接的N-1关联而言,程序只要在N的一端增加一列外键,让外键记录对象指所属的实体即可,Hibernate可使用@JoinColumn来修饰代表关联实体的属性,@JoinColumn用于映射底层的外键列。下面定义一个Person的类,Person与Address的关系就是N-1。 @Entity @Table(name="person_inf") publi原创 2016-03-08 23:31:00 · 528 阅读 · 0 评论 -
Hibernate的单向1-N关联(三)
1. 无连接表的单向1-N关联 对于无连接表的1-N单向关联而言,同样需要在N的一端增加外键列来维护关联关系,但由于程序此时只让1的一端来控制关联关系,因此直接在1的一端使用@JoinColumn修饰Set集合属性、映射外键即可。下面程序中一个Person实体可以关联多个Address实体。 @Entity @Table(name="person_inf") public class Pers原创 2016-03-08 23:38:45 · 434 阅读 · 0 评论 -
Hibernate的单向1-1关联(二)
1. 基于外键的单向1-1关联 对于基于外键的1-1关联而言,只要先使用@OneToOne注解修饰代表关联关系实体的属性,再使用@JoinColumn映射外键列即可——由于是1-1关联,因此应该为@JoinColumn增加unique=true。下面是Person类的代码。 @Entity @Table(name="person_inf") public class Person { //原创 2016-03-08 23:36:12 · 386 阅读 · 0 评论 -
Hibernate多列作为联合主键(六)
如果需要直接将持久类的多列映射成联合主键,则该持久化类必须满足如下条件: 1) 有无参数的构造器。 2) 必须实现java.io.Serializeble接口。 3) 建议正确地重写equals()和hashCode()方法,也就是根据组件类的关键属性来区分组件对象。 下面是一个Person的类。 @Entity @Table(name="per原创 2016-03-07 21:22:36 · 2450 阅读 · 0 评论 -
Hibernate组件作为复合主键(五)
使用组件作为复合主键,也就是使用组件作为持久化类的标识符,则该组件类必须满足以下的要求。 1) 有无参数的构造器。 2) 必须实现java.io.Serializeble接口。 3) 建议正确地重写equals()和hashCode()方法,也就是根据组件类的关键属性来区分组件对象。 程序先定义如下Name组件类作为实体的主键类型。 public原创 2016-03-07 21:20:28 · 573 阅读 · 0 评论 -
Hibernate组件作为Map索引(四)
由于Map集合的特殊性,它允许使用复合类型的对象作为Map的key,所以Hibernate也对这种组件作为Map Key的情形是提供支持的。建议使用@MapKeyClass注解指定Map key的类型。如下是一个Person类中包含一个Map类型的集合属性。 @Entity @Table(name="person_inf") public class Person { // 标识属性 @I原创 2016-03-07 21:17:28 · 517 阅读 · 0 评论 -
Hibernate集合属性的元素为组件(三)
对于集合元素是组合属性,程序依然使用@ElementCollection修饰集合属性,使用@CollectionTable映射保存集合属性的表。对于带索引的集合,如果是List集合,则使用@OrderColumn映射索引列;如果Map集合,则使用@MapKeyColumn映射索引列。下面是Person类代码: @Entity @Table(name="person_inf") public cl原创 2016-03-07 21:13:40 · 490 阅读 · 0 评论 -
Hibernate映射组件属性(一)
组件属性的意思是,持久化类的属性并不是基本数据类型,也不是字符串、日期等标量类型的变量,而是一个复合类型的对象,在持久化过程中,它仅仅被当作值类型,而并非引用另一个持久化实体。组件属性的类型可以是任何自定义类。看下面实体的源代码。 @Entity @Table(name="person_inf") public class Person { @Id @Column(name="person_原创 2016-03-07 21:05:24 · 839 阅读 · 0 评论 -
Hibernate映射组件属性为集合(二)
如果组件类又包含了List、Set、Map等集合属性,则可直接在组件类中使用@ElementCollection修饰集合属性,并使用@CollectionTable指定保存集合属性的数据表——与普通实体类中映射集合属性的方式基本相同。假设上面的例子的Name中增加了一个power属性,而这个power属性为Map类型的。 @Embeddable public class Name { // 定原创 2016-03-07 21:11:39 · 531 阅读 · 0 评论 -
Hibernate映射集合属性
集合属性大致有两种:一种是单纯的集合属性,例如List、Set或数组等集合属性;另一种是Map结构的集合属性,每个属性值都有对应的key映射。不管哪种类型的集合属性,都统一用@ElementCollection注解进行映射。使用@ElementCollection注解时可指定如下的属性。 Hibernate使用标准的@CollectionTable注解映射保存集合属性的表,使用该注解原创 2016-03-06 19:23:51 · 3613 阅读 · 1 评论 -
Hibenate映射属性
在默认情况下,被@Entityt修饰的持久化类的所有属性都会被映射到底层数据表。为了指定某个属性所映射的数据列的详细信息,如列名、列字段长度等,可以在实体类中使用@Column修饰该属性。使用该属性可指定如下的属性。 Hibernate同样允许使用@Access注解修饰该属性,用于单独改变Hibernate对该属性的访问策略。该@Access用于覆盖在持久上指定的@access注解。原创 2016-03-06 18:10:03 · 1117 阅读 · 0 评论 -
Hibernate的持久化对象状态的方法
1. 持久化实体 为了让瞬态对象转换为持久化状态,HibernateSession提供了如下几个方法。 1) Serialzable save(Object obj):将obj对象变为持久化状态,该对象的属性将被保存到数据库。 2) void persist(Object obj):将obj对象转化为持久化状态,该对象的属性将被保存到数据库。 3)原创 2016-03-06 18:06:14 · 1149 阅读 · 0 评论 -
Hibernate之持久化对象
Hibernate是一个纯粹的O/RMapping框架,通过Hibernate的支持,程序开发者只需要管理对象的状态,无须理会底层数据库系统的细节。相当于常见的JDBC持久层方案中需要手工管理SQL语句,Hibernate采用完全面向对象的方式来操作数据库。对于程序开发者而言,眼里只有对象、属性,无须理会底层数据表、数据列等概念。 1. 持久化类的要求 虽然Hibernate对持久类滑太远的要原创 2016-03-06 18:03:36 · 695 阅读 · 0 评论 -
Hibernate的HibernateUtil类补充
public class HibernateUtil { public static final SessionFactory sessionFactory; static { try { // 使用默认的hibernate.cfg.xml配置文件创建Configuration实例 Configuration cfg = new Configuration()原创 2016-03-09 21:47:48 · 442 阅读 · 0 评论