- 浏览: 197762 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (121)
- java_基础 (26)
- java_web (15)
- javascript (9)
- extJS (0)
- dwr (0)
- guobin_ETL (1)
- guobin_ssh (17)
- guobin_webservice (1)
- guobin_jbpm (0)
- guobin_jquery (0)
- guobin_acegi (1)
- guobin_poi/jxl (2)
- guobin_multiThread (0)
- guobin_名称解释 (0)
- guobin_FLEX (0)
- guobin_php (0)
- guobin_ORACLE (1)
- guobin_mysql (0)
- guobin_linux (0)
- guobin_powerDesigner (0)
- guobin_visol (0)
- guobin_ER/STUDIO (0)
- guobin_jmesa (0)
- guobin_weblogic (0)
- guobin_kettle (0)
- guobin_一路风雨 (5)
- guobin_spark (0)
- java_xml (7)
- guobin_规则引擎 (0)
- 插件开发 (2)
- 软件管理 (3)
- spring mvc (2)
- java_jni (1)
- eclipse (1)
- oracle (0)
- 项目学习笔记 (1)
- java多线程学习记录 (9)
- websphere性能设置和日常维护 (2)
- (1)
- 系统软件架构设计 (1)
- ces (1)
- 需求分析 (2)
- IBM-CICS GATEWAY (1)
- 工具使用 (1)
- 网络信息安全编程 (1)
最新评论
-
yzh__:
学习一个
Hibernate 自关联注解方式 -
xiaoyahuang:
"2)将Sysdeo Plugin下的DevLoad ...
eclipse项目引用 -
guobin6125:
guobin6125 写道sfasshahhah评论的评论
欢迎使用Kit! -
guobin6125:
sfass
欢迎使用Kit! -
guobin6125:
tst23
欢迎使用Kit!
说明
在HibernateAnnotations中通过@ManyToMany注解可定义多对多关联。同时,也需要通过注解@JoinTable描述关联表和关联条件。对于双向关联,其中一端必须定义为owner,另一端必须定义为inverse(在对关联表进行更性操作时这一端将被忽略)。被关联端不必也不能描述物理映射,只需要一个简单的mappedBy参数,该参数包含了主体端的属性名,这样就绑定了双方的关系。
上周六去电影院圆了儿时的梦想,看了变形金刚,超棒的一部片子 ^_^。那么就以剧院和观众为例讲解吧。
如何制作PO
1)找到CUBE--需要引入哪些类:
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
2)找到汽车人--主体端:
* Theater
* @author allen
*/
@SuppressWarnings("serial")
@Entity
@Table(name = "THEATER")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Theater implements Serializable {
@ManyToMany(
targetEntity=net.allen.domain.Audience.class,
cascade ={CascadeType.PERSIST,CascadeType.MERGE},
fetch=FetchType.LAZY
)
@JoinTable(
name="THEATER_AUDIENCE",
joinColumns={@JoinColumn(name="THEATER_ID")},
inverseJoinColumns={@JoinColumn(name="AUDIENCE_ID")}
)
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private List<Audience> audiences = new ArrayList<Audience>();
/**
* @return Returns the audiences.
*/
public List<Audience> getAudiences() {
return audiences;
}
/**
* @param audiences The audiences to set.
*/
public void setAudiences(List<Audience> audiences) {
this.audiences = audiences;
}
}
功能说明:
@ManyToMany注解
targetEntity属性:指向被关联端的实体对象
cascade属性:与Hibernate xml配置文件中的意思一样,这里选用两种方式
CascadeType.PERSIST:若实体是处于被管理状态,或当persist()方法被调用时,触发级联创建(create)操作。
CascadeType.MERGE:若实体是处于被管理状态,或当merge)方法被调用时,触发级联合并(merge)操作。
其它属性如CascadeType.REMOVE、CascadeType.REFRESH、CascadeType.ALL等属性可参考Hibernate Annotations Reference。
fetch属性:关联关系获取方式
LAZY(默认值)在第一次访问关联对象时才触发相应的查询操作。
另一个值EAGER是通过out join select直接获取关联对象
@JoinTable注解
name属性:指定关联表名 若不指定Hibernate可以根据既定的规则自动生成(具体规则见reference)
joinColumns属性:指定主体端的外键
inverseJoinColumns属性:指定被关联端的外键
@Cache注解
usage属性:给定了缓存的并发策略
3)找到霸天虎--被关联端:
* Audience
* @author allen
*/
@SuppressWarnings("serial")
@Entity
@Table(name = "AUDIENCE")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Audience implements Serializable {
@ManyToMany(
cascade={CascadeType.PERSIST,CascadeType.MERGE},
mappedBy="audiences"
)
/** 所在的剧院 */
private List<Theater> theaters = new ArrayList<Theater>();
/**
* @return Returns the theaters.
*/
public List<Theater> getTheaters() {
return theaters;
}
/**
* @param theaters The theaters to set.
*/
public void setTheaters(List<Theater> theaters) {
this.theaters = theaters;
}
}
@ManyToMany注解
mappedBy属性:指定了主体端的属性名,用以绑定双方的关系
汽车人,变形!--如何操作
* select transformers wathers from ShowMax Theater
*/
protected void selectWathers() {
//1) get current theater
Theater theater = findTheaterById("showMax");
//2) clear theater's audiences
theater.getAudiences().clear();
//3) get audiences who want to watch transformers
List<Audience> audiences = findAudiencesByMovie("transformers");
for (Audience a: audiences) {
//4) mountain relations
a.getTheaters().add(theater);
theater.getAudiences().add(a);
}
//5) do save main entity
doSaveEntity(theater);
}
tips:注意第二步的操作。
发表评论
-
OpenSessionInViewFilter失效问题解决(SSH2)
2012-07-19 14:07 2318今天在用Hibernate延迟加载时,显示到界面出现如下问题: ... -
Hibernate 自关联注解方式
2012-07-18 18:08 10884Hibernate自关联(使用注解) Hib ... -
hibernate 缓存机制
2012-07-18 11:54 1082CacheConcurrencyStrategy有五种缓 ... -
Spring事务的传播行为和隔离级别[transaction behavior and isolated level]
2012-07-17 23:43 0事务的传播行为和隔离级别[transaction beh ... -
EJB中7个事务属性(PROPAGATION_REQUIRED等)以及5个隔离属性
2012-07-17 23:42 0EJB中7个事务属性(PROPAGATION_REQUI ... -
junit测试之hiberante延迟加载问题
2012-07-17 22:25 0junit测试之hiberante延迟加载问题 ... -
Hibernate 注解对Hibernate属性(CascadeType、JoinColumn、JoinTable、ForeignKey等)的研究
2012-07-17 20:28 6741------------------------------- ... -
Hibernate SQL方言 (hibernate.dialect) Spring配置文件applicationContext.xml
2012-07-17 07:56 8696Hibernate SQL方言 (hibernate.d ... -
spring 中配置sqlserver2008
2012-07-16 23:12 1058不得不说的在 MS SQL SERVER 下的 JDBC ... -
BeanCreationException: No unique bean of type
2012-07-16 13:04 1066我定义了一个基类接口BaseDao,下面有些update\sa ... -
Spring BeanBean的作用域及生命周期
2012-06-20 10:25 1737一、Spring Framework支持五种作用域(其中 ... -
Struts 1 和 Struts 2 的线程安全
2012-06-20 10:24 845昨天人问我Struts 2是怎么保证全局变量的线程安全 ... -
学习Spring必学的Java基础知识(1)----反射
2012-05-22 13:40 782http://www.iteye.com/topic/1123 ... -
Hibernate总结篇
2012-04-26 07:47 1359一、HQL经验总结: HQL ... -
Hibernate HQL语句的拼写
2012-04-22 19:11 1044Hibernate HQL语句的拼写 ... -
HQL中如何实现select top n这样的功能?
2012-04-22 19:09 2588HQL中如何实现select top n这样的功能? ... -
使用strtuts2的iterator标签循环输出二维数组和嵌套集合
2012-04-22 17:31 1289其实都一样的嵌套对象跟二维数组。先看看嵌套对象 ... -
hibernate注解 关系映射
2012-04-17 17:12 11001)一对一外键关联映射(单向) @OneToOne(c ... -
Hibernate 注解及简单实例
2012-04-17 16:09 719hibernate注解 1、@Entity(name= ...
相关推荐
Hibernate 注解映射支持多种关联关系的映射,包括多对一、一对多、双向一对多和双向一对一。 * 多对一映射:使用 @ManyToOne 和 @JoinColumn 注解,指定关联列。 * 一对多映射:使用 @OneToMany 注解,默认会使用...
在开发过程中,IDE如Eclipse或IntelliJ IDEA提供了对Hibernate的集成支持,包括代码生成、对象关系图显示以及自动配置检查,这使得关系映射的设置更加直观和便捷。 六、最佳实践 1. 选择合适的集合类型:根据业务...
多对多的关联关系可以使用`@ManyToMany`注解,Hibernate会自动创建一个中间表来存储两个实体类之间的关联。如果需要自定义中间表的名称或字段,可以使用`@JoinTable`注解。在双向多对多关联中,依然需要`mappedBy`来...
本资料“hibernate注解处理映射关系共14页.pdf.zip”显然是一个关于Hibernate注解使用的详细教程,涵盖了14页的内容。以下是基于该主题的详尽知识点解析: 1. **Hibernate概述**:Hibernate是Java平台上的一个开源...
关系的数据库表示可以分为一对一、一对多和多对多三种类型。例如,一个部门表和一个部门主管表之间是一对一关系,而一个部门表和下属人员表之间则是一对多关系。对象表示方面,对象关系分为单向和双向。双向关系意味...
本教程将带你入门Hibernate的多对多实体映射,帮助你理解如何通过源码来实现这种复杂的关系映射。 一、Hibernate概述 Hibernate是一个对象关系映射(ORM)框架,它允许我们将Java对象(实体)与数据库表进行映射,...
- `@OneToMany`、`@ManyToOne`、`@OneToOne`、`@ManyToMany`:表示不同类型的关联关系,例如一对多、多对一、一对一和多对多。 3. **配置自动建表**: - 在Hibernate的配置文件(hibernate.cfg.xml)中,可以通过...
3. `org.hibernate.cfg`:这里的类主要用于配置和初始化Hibernate环境,如`AnnotationConfiguration`类就是配置Hibernate的入口,它会读取注解并生成相应的映射信息。 4. `org.hibernate.boot.model`和`org....
标题中的“hibernate 映射-一对多双向”指的是在Java Hibernate框架中处理数据库关系映射中的一对多关联关系,并且这种关联是双向的。Hibernate是一个对象关系映射(ORM)工具,它允许开发者用Java对象来表示数据库...
"Hibernate注解一对多,多对一"是两个常见的关系映射类型,适用于处理实体类之间的复杂关联。 一、一对多关系 在现实世界中,例如一个部门有多个员工,这就是一对多的关系。在Hibernate中,我们可以使用`@...
在Java的持久化框架Hibernate中,多对多关联映射是一种常见的关系数据库模型映射方式,用于处理两个实体之间存在多个实例互相关联的情况。本文将深入探讨Hibernate如何实现多对多关联映射,并通过实际例子解析相关...
在这个“hibernate双向多对多关联映射(注解版)”的主题中,我们将深入探讨如何使用Hibernate的注解配置来处理数据库中的双向多对多关联关系。 首先,多对多关联在数据库设计中是指两个实体之间存在多个对应关系,...
本篇文章将深入探讨Hibernate中注解的一对多、多对多和一对一关系映射。 ### 一对多关系 在现实生活中,例如一个班级有一个班主任,而班主任可以管理多个学生,这就是典型的“一对多”关系。在Hibernate中,我们...
在Java的持久化框架Hibernate中,单向多对多映射是一种常见的关系映射方式,尤其在处理数据库中两个实体间复杂关联时显得尤为重要。在注解版的Hibernate中,我们不再需要传统的XML配置文件,而是直接在实体类上使用...
2. **注解映射**: 随着Java 5的发布,Hibernate引入了注解支持,可以直接在类和属性上使用注解进行映射,简化了配置,提高了代码的可读性。 **四、懒加载和急加载** - **懒加载(Lazy Loading)**: 默认情况下,...
三、多对一关系映射(Many-to-One) 与一对一相反,多对一表示多个实体实例对应一个实体实例。使用`@ManyToOne`注解来实现。在上述部门和员工的例子中,Employee类中也需要用到`@ManyToOne`来指明所属的Department...
Hibernate 支持多种集合类型,如 List、Set、Map 等,它们可以作为一对多或多对多关系的容器。`@ElementCollection` 用于映射非实体类属性的集合,而 `@OrderColumn` 可以指定集合元素的排序方式。 6. **级联操作 ...
在Hibernate中,关系注解用于在实体类中定义不同类型的数据库关系,如一对一、一对多、多对多等。以下是关于Hibernate关系注解的详细说明: 1. **一对一外键关联映射(单向)** 使用`@OneToOne`注解实现一对一关系...