/*一对一的单项外键关联*/@Entitypublic class Husband { @Column(name = "id") private Integer id; @Column(name = "name") private String name; private Wife wife; @OneToOne @JoinColumn(name = "wifeId") public Wife getWife() { return wife; } public void setWife(Wife wife) { this.wife = wife; } @Id @GeneratedValue(strategy = GenerationType.IDENTITY) public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
/*一对一的单向外键关联*/@Entitypublic class Wife { @Column(name = "id") private Integer id; @Column(name = "name") private String name; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
/*一对一的双向外键关联*/只要有双向关联,mappedBy必设@Entitypublic class Wife { @Column(name = "id") private Integer id; @Column(name = "name") private String name; @OneToOne(mappedBy = "wife")//告诉hibernate,在Husband表中的wife属性中已经做了映射,这边不用在生成外键,对方的是主导。 private Husband husband; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
/*一对一的单向主键关联*/(了解)@Entitypublic class HusbandPk { @Column(name = "id") private Integer id; @Column(name = "name") private String name; private Wife wife; @OneToOne @PrimaryKeyJoinColumn//设置主键关联(但是表中并没有建立联系) public Wife getWife() { return wife; } public void setWife(Wife wife) { this.wife = wife; } @Id @GeneratedValue(strategy = GenerationType.IDENTITY) public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
/*一对一的单向主键关联*/@Entitypublic class WifePk { @Column(name = "id") private Integer id; @Column(name = "name") private String name; private Husband husband; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
/*一对一的双向主键关联*/@Entitypublic class WifePk { @Column(name = "id") private Integer id; @Column(name = "name") private String name; private Husband husband; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @OneToOne @PrimaryKeyJoinColumn //建立双向主键关联 public Husband getHusband() { return husband; } public void setHusband(Husband husband) { this.husband = husband; } }
/*一对一的单项外键联合主键*/import java.io.Serializable;import java.util.Objects;public class WifePK implements Serializable { private Integer id; private String name; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; WifePK wifePK = (WifePK) o; return Objects.equals(id, wifePK.id) && Objects.equals(name, wifePK.name); } @Override public int hashCode() { return Objects.hash(id, name); } }
/*一对一的单项联合主键关联,假设id与name是联合主键*/@Entity @IdClass(WifePK.class) //指名用的是 WifePK类做联合主键public class Wife { private Integer id; private String name; private Integer age; @Id public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } @Id public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
/*一对一的单项联合主键关联*/@Entitypublic class Husband { @Column(name = "id") private Integer id; @Column(name = "name") private String name; private Wife wife; @OneToOne //(1)指定联合主键关联时可以不写@JoinColumns(2):写的情况如下 @JoinColumns(value = { @JoinColumn(name = "wifeId",referencedColumnName = "id"), @JoinColumn(name = "wifeName",referencedColumnName = "name") }) public Wife getWife() { return wife; } public void setWife(Wife wife) { this.wife = wife; } @Id @GeneratedValue(strategy = GenerationType.IDENTITY) public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
/*嵌入类*/(注意同名现象)public class WifePK implements Serializable { private String wifeName; public String getWifeName() { return wifeName;} public void setWifeName(String wifeName) {this.wifeName = wifeName;} }
/*一对一的嵌入关联*/@Entitypublic class Husband { @Column(name = "id") private Integer id; @Column(name = "name") private String name; private WifePK wifePK; @Embedded //嵌入式注解 public WifePK getWifePK() { return wifePK; } public void setWifePK(WifePK wifePK) { this.wifePK = wifePK; } @Id @GeneratedValue(strategy = GenerationType.IDENTITY) public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
/*多对一的单向关联,一个用户在一个分组*/@Entity @Table(name = "t_user")public class User { private Integer id; private String name; private Group group1; @ManyToOne //设置多对一关联映射 public Group getGroup1() {return group1; } public void setGroup1(Group group1) {this.group1= group1;} @Id @GeneratedValue(strategy = GenerationType.IDENTITY) public Integer getId() {return id;} public void setId(Integer id) {this.id = id;} public String getName() {return name;} public void setName(String name) {this.name = name;} }
@Entity @Table(name = "t_user")public class Group { private Integer id; private String name; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) public Integer getId() {return id; } public void setId(Integer id) {this.id = id; } public String getName() {return name; } public void setName(String name) {this.name = name; } }
/*一对多关联映射,一个分组有多个用户*/@Entity @Table(name = "t_user")public class Group { private Integer id; private String name; private Set<User> userSet; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @OneToMany @JoinColumn(name = "groupId") public Set<User> getUserSet() { return userSet; } public void setUserSet(Set<User> userSet) { this.userSet = userSet; } }@Entity @Table(name = "t_user")public class User { private Integer id; private String name; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
/*多对一、一对多的双向关联*/
@Entity @Table(name = "t_group")public class Group { private Integer id; private String name; private Set<User> userSet; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @OneToMany(mappedBy = "group") //将关联id设在一方 public Set<User> getUserSet() { return userSet; } public void setUserSet(Set<User> userSet) { this.userSet = userSet; } }
@Entity @Table(name = "t_user")public class User { private Integer id; private String name; private Group group; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @ManyToOne public Group getGroup() { return group; } public void setGroup(Group group) { this.group = group; } }
/*多对多单双向关联*/ @Entity @Table(name="theacher") public class Theacher { private Integer id; private String name; private Set<Student> student = new HashSet<Student>(); @Id @GeneratedValue(strategy = GenerationType.IDENTITY) public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @ManyToMany @JoinTable(name = "t_s", joinColumns={@JoinColumn(name = "theacherId")},//指定我方连接Id inverseJoinColumns = {@JoinColumn(name = "staudentId")}//反向指定连接Id ) public Set<Student> getStudent() { return student; } public void setStudent(Set<Student> student) { this.student = student; } }
@Entity @Table(name = "student") public class Student { private Integer id; private String name; private Set<Theacher> theacherSet; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @ManyToMany(mappedBy = "student") public Set<Theacher> getTheacherSet() { return theacherSet; } public void setTheacherSet(Set<Theacher> theacherSet) { this.theacherSet = theacherSet; } }
