java hibernate 表关联_Hibernate表关联配置

一对一

一对一主键关联

1.XML配置

必须双向关联

被关联方主键生成策略为外键生成策略

被关联方one-to-one需设置constrained=“true”约束

/p>

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

/p>

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

person

2.Java注解配置

主控方使用@PrimaryKeyJoinColumn

被控方在@OneToOne中要加上(mappedBy = "card")

//基于注解的配置

@Entity

@Table(name = "person")

public class Person {

@Id

@GeneratedValue(strategy = GenerationType.AUTO)

private Integer id;

@Column(name = "person_name")

private String personName;

//共享主键关联使用PrimaryKeyJoinColumn

@OneToOne(cascade = CascadeType.ALL)

@PrimaryKeyJoinColumn

private Card card;

}

@Entity

@Table(name = "card")

public class Card {

@Id

@GenericGenerator(name = "generator",strategy = "foreign",

parameters = @org.hibernate.annotations.Parameter(name = "property",value = "person"))

@GeneratedValue(generator = "generator")

private Integer id;

@Column(name = "card_num")

private String cardNum;

//必须设置OneToOne,mappedBy为自己在对方中的属性名

@OneToOne(mappedBy = "card")

private Person person;

}

一对一外键关联

数据库结构

91ed14f53ca9

数据库结构

1.XML配置

各自主键生成策略无外键约束

主控方(含外键的一方)使用many-to-one,并且要加上unique="true"约束

被控方使用one-to-one,并且要加上property-ref="passageContent"

/p>

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

/p>

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

2.Java注解配置

区别于XML配置,这里全部采用@OneToOne

主控方使用@JoinColumn(name = "content_id")

被控方使用@OneToOne(mappedBy = "passageContent"),mappedBy相当于XML中的property-ref,是一个反向声明

@Entity

@Table(name = "passage")

public class Passage {

@Id

@GeneratedValue

private Integer id;

private String title;

@OneToOne

@JoinColumn(name = "content_id")

private PassageContent passageContent;

}

@Entity

@Table(name = "passage_content")

public class PassageContent {

@Id

@GeneratedValue

private Integer id;

private String content;

@OneToOne(mappedBy = "passageContent")

private Passage passage;

}

一对多关联

保存时先保存一端,再保存多端

数据库结构

91ed14f53ca9

一对多关联

1.XML配置

一端在set中要指明表及关联的键(即table和key属性),并且要放弃关系维护

/p>

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

/p>

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

2.Java注解配置

ManyToOne端要加上JoinColumn,OneToMany要加上mappedBy

如需级联操作,一端还需加上Cascade

@Entity

@Table

public class Address {

@Id

@GeneratedValue(strategy = GenerationType.AUTO)

private Integer id;

@Column(name = "city_name")

private String cityName;

private String address;

@ManyToOne

@JoinColumn(name = "user_id")

private User user;

}

@Entity

@Table

public class User {

@Id

@GeneratedValue(strategy = GenerationType.AUTO)

private Integer id;

private String username;

@OneToMany(mappedBy = "user")

@Cascade(CascadeType.DELETE)

private Set

addressSet;

}

多对多关联

数据库结构

91ed14f53ca9

多对对关联

1.XML配置

/p>

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

/p>

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

2.Java注解配置

@Entity

@Table

public class Student {

@Id

@GeneratedValue(strategy = GenerationType.AUTO)

private Integer id;

@Column(name = "student_name")

private String studentName;

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

@ManyToMany

@JoinTable(name = "student_teacher_real",joinColumns = {@JoinColumn(name = "student_id")},inverseJoinColumns = {@JoinColumn(name = "teacher_id")})

private Set teacherSet;

}

@Entity

@Table

public class Teacher {

@Id

@GeneratedValue(strategy = GenerationType.AUTO)

private Integer id;

@Column(name = "teacher_name")

private String teacherName;

@ManyToMany(mappedBy = "teacherSet")

private Set studentSet;

}

Java注解总结

如果是主键关联,那么就使用@PrimaryKeyJoinColumn,只要声明@JoinColumn,@PrimaryKeyJoinColumn,@JoinTable的都属于主控方,外键通常也就存储在主控方,对应的含有mappedBy的都为被控方。

一对一关联不管是主键关联还是外键关联,基于注解都是OneToOne

XML配置总结

一对一主键关联时,由于被控方的主键是主控方的外键,所以被控方的OneToOne标签中需要加constrained="true"约束

被控方通常需要设置inverse="true"放弃关系维护

这样的标签放置在集合内部

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值