`
lwbbupt
  • 浏览: 36385 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hibernate学习(二)

阅读更多

一、hibernate类型系统

hibernate类型系统分为3类:实体、值类型和映射类型

实体:实体类型具有标识符属性的类,可能处于三种周期状态:瞬时、托管,持久化。

值类型:不具有标识符属性,其生命周期完全有自己的实体实例的生命周期决定。

二、映射集合和实体关联

1.值类型的映射关系:set、bag、list和map

(1)Set

@org.hibernate.annotations.CollectionOfElements(targetElement = java.lang.String.class)
@JoinTable(
name = "ITEM_IMAGE", joinCloumns = @JoinColumn(name = "ITEM_ID"))
@Column(name = "FILENAME", nullable =false)
private Set<String> images = new HashSet<String>();
...

 在这里集合表ITEM_IMAGE有两个列,一起形成复合主键,这里使用了泛型代码,所有targetElement在这里可以省略。

(2)List

@org.hibernate.annotations.CollectionOfElements
@JoinTable(
name = "ITEM_IMAGE",
joinColumns = @JoinColumn(name = "ITEM_ID")
)
@org.hibernate.annotations.IndexColumn(
name = "POSTION", base = 1
)
@Column
private List<String> images = new ArrayList<String>();

...

 (3)Bag

将上面的IndexColumn注解去掉,就会被当做包集合处理。但这样做,可能使客户端认为集合元素的顺序需要保存着,所以最好将List替换为Collection

(4)Map

@org.hibernate.annotations.CollectionOfElements
@JoinTable(
name ="ITEM_IMAGE",
joinColumns =@JoinColumn(name = "ITEM_ID")
)
@org.hibernate.annotationsMapKey(
columns = @Column(name = "IMAGENAME")
)
@Column(name = "FILENAME")
private Map<String, String> images = new HashMap<String, String>();
...

 (5)排序集合与有序集合

@org.hibernate.annotations.Collections.CollectionsOfElements
@JoinTable(
name = "ITEM_IMAGE",
joinColumns = @JoinColumn(name ="ITEM_ID")
)
@column(name ="FILENAME, nullable = false)
@org.hibernate.annotation.sort(
type = org.hibernate.annotations.SortType.NATUAL
)
private SortedSet<String> images = new TreeSet<String>();
...

 

@org.hibernate.annotations.CollectionOfElements
@JoinTable(
name = "ITEM_IMAGE",
joinColumns = @JoinColumn(name = "ITEM_ID")
)
@Column(name = "FILENAME", nullable = false)
@org.hibernate.annotations.OrderBy(
clause = "FILENAME asc"
)
private Set<String> images = new HashSet<String>():
...

 

排序集合指用一个Java比较器在内存中进行排序,而有序集合指用一个 order by 子句 的SQL查询在数据库级中排列。

2.组件集合。

组件类由于没有标识符,所以必须实现equals()和hashCode();可以再组件类上添加@Embeddable来启用注解

@Embedable
public class Image{

@org.hibernate.annotations.Parent
Item item;

@Column(null = false)
private String name;

....

}

 由于集合表中所有的列都为复合组件,所以这些列为not null 很重要,可以再集合表中添加代理主键,来使得某些列可以为空

 

@org.hibernate.annotations.CollectionsOfElements
@JoinTable(
name = "ITEM_IMAGE",
joinColumns = @Column(name = "ITEM_ID")
)
@CollectionId(
column = @Column(name = "ITEM_IMAGE_ID"),
type = org.hibernate.annotations.Type(type = "long"),
generator = "sequence"
)
private Collection<Image> image = new ArrayList<Image>();
...

 

3.映射父子关系

(1)多对一关联映射

Public class Bid{

...

@ManyToOne(targetEntity = auction.mode.Item.class)
@JoinColumn(name ="ITEM_ID", nullable = fasle)
private Item item;
...


}

 @ManyToOne注解的位置有@Id注解的位置决定。

(2)一对多

onetomany表明集合没有包含值类型的实例,而是包含对实体实例的引用。考虑这种情况,同一个外键值有两个不同内存表示方法,eg:

bid.setItem(item);
bids.add(bid);

 以上代码hibernate会试图执行两个不同的SQL语句,更新同一个外键列,我们可以通过注解指定那一端的变化不与数据库同步。

public class Item{

...
@OneToMany(mappedBy = "item")
private set<Bid> bids = new HashSet<Bid>():
...

}

 mappedBy属性必须指定目标实体的反向属性,此时只修改bids,不会同步到数据库。

3.级联操作

public class Item{

@OneToMany(
cascadeType ={CascadeType.PERSIST, CascadeType.MERGE},
mapedBy = “item”
)
private Set<Bid> bids = new HashSet<Bid>():
...


}

 对Item进行保存更新操作,同时也会对Bid进行保存更新操作,此外级联操作还有删除,与孤儿删除操作。

 

 

分享到:
评论

相关推荐

    hibernate学习资料大全

    【hibernate学习资料大全】 Hibernate 是一个开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序对数据库的操作。这个压缩包包含了丰富的Hibernate学习资源,旨在帮助开发者深入理解和熟练掌握这一强大的...

    Hibernate学习笔记整理

    Hibernate学习笔记整理 以下是 Hibernate 框架的详细知识点: Hibernate 介绍 Hibernate 是一个 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到数据库表中。它提供了一个简洁的方式来访问和操作...

    Hibernate学习.pdf

    ### Hibernate学习知识点详解 #### 1. Hibernate简介与安装配置 **标题:** Hibernate学习 **描述:** Hibernate 学习 Hibernate学习.pdf **标签:** Hibernate 学习 Hibernate学习.pdf **知识点详解:** ####...

    Hibernate学习文档集合

    《Hibernate学习文档集合》 Hibernate,作为Java领域中的一款强大且广泛应用的对象关系映射(ORM)框架,极大地简化了数据库操作。本集合包含了三个关键的学习文档,分别关注于Hibernate的操作基础、对象关系映射和...

    学习hibernate第二天

    本篇将基于“学习Hibernate第二天”的主题,结合“源码”和“工具”这两个标签,深入探讨Hibernate的一对一主键关联双向映射,以及如何在实际开发中利用这一特性。 在Java对象关系映射(ORM)框架中,数据模型通常...

    Hibernate 中文api 等学习资料

    标题"Hibernate 中文api 等学习资料"暗示了这是一组针对Hibernate ORM框架的中文学习资源,包括API文档和其他指南,旨在帮助用户更好地理解和使用Hibernate。 描述中的"hibernate orm框架api中文文档,学习资料,...

    hibernate学习总结文档

    **Hibernate 框架概述** Hibernate 是一个开源的对象关系映射(ORM)框架,它为 Java 开发者提供了一种在 Java 应用程序中管理关系...通过实践和深入学习,你可以更好地利用 Hibernate 实现高效、可靠的数据库应用。

    hibernate学习笔记第二天的源码

    在深入探讨Hibernate学习笔记第二天的源码之前,我们先来理解一下Hibernate的核心概念。Hibernate是一个开源的对象关系映射(ORM)框架,它允许Java开发者将数据库操作转化为对象模型,大大简化了数据访问层的开发...

    Hibernate学习笔记和资料

    hibernate概述,hibernate入门Demo,hibernate配置文件详解(全局配置,实体类映射配置),配置实体规则,核心API详解(Configuration,sessionFactory,session,Transaction),...查询的优化,一级缓存,二级缓存,批量查询,注解方式

    hibernate学习资料大合集

    **hibernate学习资料大合集** 本资料合集涵盖了关于Hibernate的各种学习资源,包括PDF、CHM和Word文档,旨在帮助开发者深入理解和掌握Hibernate这一强大的Java持久化框架。Hibernate作为一个对象关系映射(ORM)...

    非常好的Hibernate学习资料

    《Hibernate学习精华》 Hibernate,一个开放源代码的对象关系映射框架,是Java开发者在数据库操作中不可或缺的工具。它简化了Java应用与数据库之间的交互,使得开发人员能够以面向对象的方式来处理数据库操作,极大...

    hibernate学习文档

    《Hibernate学习文档》 Hibernate是一种广泛应用于Java开发中的对象关系映射(ORM)框架,它的核心价值在于简化了数据库操作,通过将Java对象模型与SQL关系模型进行映射,使得开发者可以使用面向对象的方式来处理...

    hibernate学习心得

    随着对 Hibernate 的深入学习,你将了解缓存机制、第二级缓存、查询优化、关联映射等高级特性。这将帮助你在实际项目中更好地利用 Hibernate,提高性能并降低复杂性。 总之,学习 Hibernate 从配置数据库连接开始,...

    hibernate学习笔记,学习大纲【吐血推荐】

    **Hibernate学习笔记与大纲** Hibernate 是一款开源的Java语言下的对象关系映射(ORM)框架,它极大地简化了数据库操作,使得开发人员可以使用面向对象的方式处理数据,而无需过多关注底层的SQL语句。本笔记将深入...

    Hibernate DOC中文文档(学习Hibernate必备手册)

    《Hibernate DOC中文文档》是学习Hibernate框架的重要参考资料,它详细阐述了Hibernate的核心概念、配置、对象关系映射(ORM)以及各种操作技巧。对于初学者和有经验的开发者来说,这份文档都是掌握Hibernate不可或...

    hibernate学习源代码祝你提高

    在这个"hibernate学习源代码祝你提高"的资料包中,我们可以深入理解 Hibernate 的工作原理和设计模式,这对于初学者提升技能非常有帮助。该资源主要针对 Hibernate 3.x 版本,这是一个广泛使用的版本,包含了丰富的...

    hibernate学习笔记文档

    #### 二、Hibernate 入门与基本操作 - **环境搭建**: - 需要在项目的 lib 目录下添加所需的库文件,包括 hibernate 和相关依赖(如 JUnit、log4j 等),以及数据库驱动等。 - 将所需 jar 包添加到项目的 build ...

    hibernate学习资料

    在“hibernate学习资料”中,我们可以看到两个关键文件:“hibernate┐≥╝▄┐¬╖ó2016░µ╫╩┴╧”和“hibernate框架开发2016版资料”。这些文件很可能是针对Hibernate框架的教程或指南,可能包含了2016年时的...

Global site tag (gtag.js) - Google Analytics