Hibernate映射对象之间的多种关系
2011-12-06 09:41
218 查看
刚学到的,做个总结常看看以防忘了。
Hibernate中表现对象之间关系有:一对一单向,一对一双向,(二者都分主键与外键两种);一对多单向,多对一单向,一对多(多对一)双向,多对多单向,多对多双向,一个是另一个的一部分。其中重要的是下面做总结的这些,其他的都还可以,不是很重要。这里只写annotation的注释方式,没有写xml文件配置。
一对一单向外键:例子Husband and wife
@OneToOne
@JoinColumn(name="wife")//生成数据库字段名,在husband中添加wife的外键字段。
public Wife getWife(){}
一对一双向外键:例子husband and wife
Wife类中:
@OneToOne(mappedBy="wife")//作用是指定一对一关联是被husband类的wife属性做的映射。
public Husband getHusband{}
husband类中:写wife对象属性
@OneToOne
@JoinColumn(name="wifeId")//指定生成的数据库的字段名。此段将由HUSBAND表中生成wifeId字段作为fk外键,wife表中不生成husbandid字段。
public Wife getWife(){}
多对一单向:例子user and group
在user类中的group属性上做标注
@ManyToOne//多对一关联User是多一方,group是一的一方
@JoinColumn(name="groupId")//User表中生成groupId字段
public Group getGroup(){}
一对多单向:例子group and user
@OneToMany
@JoinColumn(name="groupId")//user表中生成groupid字段
public Set<User>getUsers(){}
多对一双向(等同于一对多双向):user and group
以多得一方(User)为主,先配置多的一方
@ManyToOne
@JoinColumn(name="groupId")
public Group getGroup(){}
一的一方(group)配置
@OneToMany(mappedBy="group")//双向的一定要加mappedBy
多对多单向:例子:student and teacher
Teacher类中:此关联关系中,teacher是主的一方,student是附属的一方
@ManyToMany
@JoinTable(name="t_s",//指定中间表表名
joinColumn={@JoinColumn(name="teacherId")},//本类主键在中间表生成对应字段名
inverseJoinColumns={@JoinColumn(name="studentId")})//对方主键在中间表生成字段名
public Set<Student> getStudent(){}
多对多双向:例子:student and teacher
teacher一方配置
@ManyToMany
@JoinTable(name="t_s",//指定中间表表名
joinColumn={@JoinColumn(name="teacherId")},
inverseJoinColumns={@JoinColumn(name="studentId")})
public Set<Student> getStudent(){}
student 一方配置
@ManyToMany(mappedBy="students")//注意Mapped与@JoinTable等一类的配置要分开,不然表的字段会很乱。
一个对象是另一个对象的一部分。例子:husband and wife
@Embedded
public Wife getWife(){}
在Wife中,若想修改name,让wife 与husband的name在DB中字段不同,则可在wife name中设定:
@Column(name="wifeName")
public String getName(){}
以上有理那个大铁律:双向关系在程序中要设定双向关联,一定有MappedBy。
*************************************************************************************************************************************************************************************
==================================================================================================================================
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
所以总结:
一般双向:会有joinColumn 和mappedBy,其中mappedBy在少的一方使用,比如user and group中,group用mappedBy,user用joinColumn,确定对方在这边表中的字段名;
总结:只要是双向两个都要设
一般的单向:只有一个joinColumn(name="")即可
manyToMany单向:设置中间表的名字,表中两个关键字段的来源,但也还好,因为模式固定:@ManyToMany@JoinTable(name="",JoinColumn=@JoinColumn,inverseJoinColumns=@JoinColumn)
manyToMany双向:在以上那个中间表的设定后,在另一个类上设定mappedBy.
所以,总结下来也就是单向joinColumn,双向再加mappedBy(用在少的一方).
Hibernate中表现对象之间关系有:一对一单向,一对一双向,(二者都分主键与外键两种);一对多单向,多对一单向,一对多(多对一)双向,多对多单向,多对多双向,一个是另一个的一部分。其中重要的是下面做总结的这些,其他的都还可以,不是很重要。这里只写annotation的注释方式,没有写xml文件配置。
一对一单向外键:例子Husband and wife
@OneToOne
@JoinColumn(name="wife")//生成数据库字段名,在husband中添加wife的外键字段。
public Wife getWife(){}
一对一双向外键:例子husband and wife
Wife类中:
@OneToOne(mappedBy="wife")//作用是指定一对一关联是被husband类的wife属性做的映射。
public Husband getHusband{}
husband类中:写wife对象属性
@OneToOne
@JoinColumn(name="wifeId")//指定生成的数据库的字段名。此段将由HUSBAND表中生成wifeId字段作为fk外键,wife表中不生成husbandid字段。
public Wife getWife(){}
多对一单向:例子user and group
在user类中的group属性上做标注
@ManyToOne//多对一关联User是多一方,group是一的一方
@JoinColumn(name="groupId")//User表中生成groupId字段
public Group getGroup(){}
一对多单向:例子group and user
@OneToMany
@JoinColumn(name="groupId")//user表中生成groupid字段
public Set<User>getUsers(){}
多对一双向(等同于一对多双向):user and group
以多得一方(User)为主,先配置多的一方
@ManyToOne
@JoinColumn(name="groupId")
public Group getGroup(){}
一的一方(group)配置
@OneToMany(mappedBy="group")//双向的一定要加mappedBy
多对多单向:例子:student and teacher
Teacher类中:此关联关系中,teacher是主的一方,student是附属的一方
@ManyToMany
@JoinTable(name="t_s",//指定中间表表名
joinColumn={@JoinColumn(name="teacherId")},//本类主键在中间表生成对应字段名
inverseJoinColumns={@JoinColumn(name="studentId")})//对方主键在中间表生成字段名
public Set<Student> getStudent(){}
多对多双向:例子:student and teacher
teacher一方配置
@ManyToMany
@JoinTable(name="t_s",//指定中间表表名
joinColumn={@JoinColumn(name="teacherId")},
inverseJoinColumns={@JoinColumn(name="studentId")})
public Set<Student> getStudent(){}
student 一方配置
@ManyToMany(mappedBy="students")//注意Mapped与@JoinTable等一类的配置要分开,不然表的字段会很乱。
一个对象是另一个对象的一部分。例子:husband and wife
@Embedded
public Wife getWife(){}
在Wife中,若想修改name,让wife 与husband的name在DB中字段不同,则可在wife name中设定:
@Column(name="wifeName")
public String getName(){}
以上有理那个大铁律:双向关系在程序中要设定双向关联,一定有MappedBy。
*************************************************************************************************************************************************************************************
==================================================================================================================================
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
所以总结:
一般双向:会有joinColumn 和mappedBy,其中mappedBy在少的一方使用,比如user and group中,group用mappedBy,user用joinColumn,确定对方在这边表中的字段名;
总结:只要是双向两个都要设
一般的单向:只有一个joinColumn(name="")即可
manyToMany单向:设置中间表的名字,表中两个关键字段的来源,但也还好,因为模式固定:@ManyToMany@JoinTable(name="",JoinColumn=@JoinColumn,inverseJoinColumns=@JoinColumn)
manyToMany双向:在以上那个中间表的设定后,在另一个类上设定mappedBy.
所以,总结下来也就是单向joinColumn,双向再加mappedBy(用在少的一方).
相关文章推荐
- [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系
- Hibernate笔记2--映射对象之间的关系
- 【Java】Hibernate(四)对象/关系数据库映射基础
- hibernate---->对象/关系数据库映射基础
- 精通Hibernate——域对象之间的关系
- Hibernate的核心对象关系映射
- hibernate 对象 - 关系映射
- Json格式与对象之间的映射关系
- Hibernate:利用HibernateTools和ANT自动构建hibernate对象、映射文件、表之间的转换
- mybatis对象之间映射关系以及数据库表建立的时候外键的添加
- Java 类型, Hibernate 映射类型及 SQL 类型之间的对应关系
- Hibernate之对象关系映射07一对一多单向关联
- Hibernate(myeclipse创建Hibernate配置文件、创建对象-关系映射文件)
- Hibernate基础学习(五)—对象-关系映射(下)
- Hibernate,JPA 对象关系映射之关联关系映射策略
- 模块化C代码与UML对象模型之间的映射(3)——UML关系
- mybatis对象之间映射关系以及数据库表建立的时候外键的添加
- mybatis对象之间映射关系以及数据库表建立的时候外键的添加
- Hibernate ORM 对象-关系 映射
- Hibernate之对象关系映射06一对一双向外键关联