您的位置:首页 > 其它

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(用在少的一方).
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐