`
lwbbupt
  • 浏览: 35251 次
  • 性别: 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学习笔记和资料

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

    Hibernate学习笔记

    Hibernate 学习笔记 get和load的区别 一对一,一对多,多对多 悲观锁,乐观锁 hibernate查询语言hql hibernate一级缓存、二级缓存 抓取策略

    学习hibernate第二天

    NULL 博文链接:https://javakid.iteye.com/blog/344604

    hibernate学习文档

    hibernate 学习资料 Session接口 Query和Criteria接口 Hibernate主键介绍 二级缓存的管理

    Hibernate学习笔记第二部分

    Hibernate学习基础部分,适合新手学习

    Hibernate3 学习笔记.ppt

    Hibernate3 学习笔记.ppt 一、O/R Mapping 二、Hibernate入门 三、Hibernate映射申明(Mapping declaration) 四、Hibernate Annotations 五、持久化对象的状态和生命周期 六、Hibernate查询 七、Hibernate最佳实践 ...

    马士兵hibernate学习笔记(原版)

    目录 课程内容 1 HelloWorld 2 Hibernate原理模拟 - 什么是O/R Mapping以及为什么... 4 一级缓存和二级缓存和査询缓存(面试题)(详见hibernate_3000_Hibernate_3KindsOf_Cache) 5 事务并发处理(面试的意义更大)

    hibernate二级缓存示例源码

    呈现了hibernate二级缓存 的基本用法 相信可参照相关文档 来学习

    Hibernate3.1_学习源码

    案例目录: ...配置文件分别用list、set和map元素配置第二张表。 07 07Hibernate_Mapping : Hibernate中的数据关联技术,是一个重点又是一个难点,演示了 一对一、多对一、一对多、多对多等几种情况。

    学习hibernate的第二章

    学习hibernate的第二章

    hibernate学习笔记

    Hibernate 学习笔记 Hibernate 学习笔记 1 第一个hibernate项目(hibernate_first) 2 测试实体对象的生命周期(hibernate_session) 3 hibernate基本映射(hibernate_basemapping) 4 class实体类---表 4 标签id 5 ...

    Spring和Hibernate学习笔记

    第二课:测试实体对象的生命周期 第三课:hibernate基本映射 第四课:hibernate多对一关联映射 ...................... Spring: 第一课:构建Spring的环境并建立一个例子 第三课:spring Bean的作用域 第四课:...

    一套不错的hibernate学习教程

    一套不错的hibernate教程,...第二章 Hibernate API 目标: Hibernate API简介 在java应用hibernate步骤 Hibernate 配置文件 持久化类 创建对象-关系映射文件 ID Sessin 接口 Hibernate对象的生命周期 ..............

    精通hibernate 完整版

    精通hibernate 完整版 力荐学习hibernate的学习用书

    Hibernate4学习基础教程(26集)

    内容涵盖安装 Hibernatetools 插件、Session 核心方法、持久化对象生命周期、对象关系映射、检索策略、检索方式、Hibernate 一\二级缓存、管理 Session、批量处理等 Hibernate 企业级开发的核心技术。

    spring hibernate 事务管理学习笔记(二)

    NULL 博文链接:https://microjava.iteye.com/blog/525981

    SSH整合学习笔记之spring与hibernate整合(二)之c3p0

    SSH整合学习笔记之spring与hibernate整合(二)之c3p0 spring与hibernate整合基于XML方式--c3p0数据库连接池的使用。

    Hibernate二级缓存配置与分析

    学习hibernate的必备,提供一个简易的流程图,方便记忆和查找

    hibernate以及连接池

    hibernate的学习资料,以及连接池和二级缓存

Global site tag (gtag.js) - Google Analytics