Hibernate 关系映射

xiaoxiao2021-02-28  45

/*一对一的单项外键关联*/@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); } }

/*一对一的单项联合主键关联,假设idname是联合主键*/@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)指定联合主键关联时可以不写@JoinColumns2:写的情况如下     @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; } }
转载请注明原文地址: https://www.6miu.com/read-2627666.html

最新回复(0)