spring-映射关系

来源:互联网 发布:终端服务的端口号 编辑:程序博客网 时间:2024/06/05 20:49

hibernate映射关系注解配置:
 Hibernate实体关系:双向关联,mappedBy必设
 
注解方式
 
1、一对一单向
 
@Entity      

public class Husband{
 
           @Id
 
           @GenerateValue
 
             pirvate int id;
 
             private String name;
 
            @OneToOne
 
            @JoinColumn(name="wifeId")
 
             private Wife wife;
 
      }
 
        @Entity
 
     public class Wife{
 
           @Id
 
           @GenerateValue
 
         private int id;
 
         private String name;
 
    }
 
2.、一对一双向
 
@Entity      

public class Husband{
 
           @Id
 
           @GenerateValue
 
             pirvate int id;
 
             private String name;
 
            @OneToOne
 
            @JoinColumn(name="wifeId")
 
             private Wife wife;
 
      }
 
 
 
        @Entity
 
     public class Wife{
 
           @Id
 
           @GenerateValue
 
         private int id;
 
         private String name;
 
       @OneToOne(mappedBy="wife")
 
        private Husband husband;
 
    }
 
3.、一对多单向
 
package com.bjsxt.hibernate;
 import java.util.HashSet;
 import java.util.Set;
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
 import javax.persistence.Id;
 import javax.persistence.JoinColumn;
 import javax.persistence.OneToMany;
 import javax.persistence.Table;
 @Entity
 @Table(name="t_group")
 public class Group {
 private int id;
 private String name;
 private Set<User> users = new HashSet<User>();
 @Id
 @GeneratedValue
 public int getId() {
    return id;
 }
 public void setId(int id) {
    this.id = id;
 }
 public String getName() {
    return name;
 }
 public void setName(String name) {
    this.name = name;
 }
 @OneToMany
 @JoinColumn(name="groupId") //不加出现3张表
 public Set<User> getUsers() {
    return users;
 }
 public void setUsers(Set<User> users) {
    this.users = users;
 }
 }
 
package com.bjsxt.hibernate;
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
 import javax.persistence.Id;
 import javax.persistence.ManyToOne;
 import javax.persistence.Table;
 @Entity
 @Table(name="t_user")
 public class User {
 private int id;
 private String name;
 @Id
 @GeneratedValue
 public int getId() {
    return id;
 }
 public void setId(int id) {
    this.id = id;
 }
 public String getName() {
    return name;
 }
 public void setName(String name) {
    this.name = name;
 }
 }
 
4、多对一单向
 
package com.bjsxt.hibernate;
 
import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
 import javax.persistence.Id;
 import javax.persistence.Table;
 
@Entity
 @Table(name="t_group")
 public class Group {
 private int id;
 private String name;
 @Id
 @GeneratedValue
 public int getId() {
    return id;
 }
 public void setId(int id) {
    this.id = id;
 }
 public String getName() {
    return name;
 }
 public void setName(String name) {
    this.name = name;
 }
 }
 
 
 
package com.bjsxt.hibernate;
 
import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
 import javax.persistence.Id;
 import javax.persistence.ManyToOne;
 import javax.persistence.Table;
 
@Entity
 @Table(name="t_user")
 public class User {
 private int id;
 private String name;
 private Group group;
 @ManyToOne
 
public Group getGroup() {
    return group;
 }
 public void setGroup(Group group) {
    this.group = group;
 }
 @Id
 @GeneratedValue
 public int getId() {
    return id;
 }
 public void setId(int id) {
    this.id = id;
 }
 public String getName() {
    return name;
 }
 public void setName(String name) {
    this.name = name;
 }
 }
 
5、一对多双向
 
package com.bjsxt.hibernate;
 import java.util.HashSet;
 import java.util.Set;
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
 import javax.persistence.Id;
 import javax.persistence.JoinColumn;
 import javax.persistence.OneToMany;
 import javax.persistence.Table;
 @Entity
 @Table(name="t_group")
 public class Group {
 private int id;
 private String name;
 private Set<User> users = new HashSet<User>();
 @Id
 @GeneratedValue
 public int getId() {
    return id;
 }
 public void setId(int id) {
    this.id = id;
 }
 public String getName() {
    return name;
 }
 public void setName(String name) {
    this.name = name;
 }
 @OneToMany(mappedBy="group")
 
public Set<User> getUsers() {
    return users;
 }
 public void setUsers(Set<User> users) {
    this.users = users;
 }
 }
 
package com.bjsxt.hibernate;
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
 import javax.persistence.Id;
 import javax.persistence.ManyToOne;
 import javax.persistence.Table;
 @Entity
 @Table(name="t_user")
 public class User {
 private int id;
 private String name;
 private Group group;
 @ManyToOne
 public Group getGroup() {
    return group;
 }
 public void setGroup(Group group) {
    this.group = group;
 }
 @Id
 @GeneratedValue
 public int getId() {
    return id;
 }
 public void setId(int id) {
    this.id = id;
 }
 public String getName() {
    return name;
 }
 public void setName(String name) {
    this.name = name;
 }
 }
 
6、多对多单向
 
@Entity
 public class Student {
 private int id;
 private String name;
 @Id
 @GeneratedValue
 public int getId() {
    return id;
 }
 public void setId(int id) {
    this.id = id;
 }
 public String getName() {
    return name;
 }
 public void setName(String name) {
    this.name = name;
 }
 }
 
@Entity
 public class Teacher {
 private int id;
 private String name;
 private Set<Student> students = new HashSet<Student>();
 @Id
 @GeneratedValue
 public int getId() {
    return id;
 }
 public void setId(int 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="teacher_id")},
   inverseJoinColumns={@JoinColumn(name="student_id")}
    )     //改变中间表的名字和字段名字
 public Set<Student> getStudents() {
    return students;
 }
 public void setStudents(Set<Student> students) {
    this.students = students;
 }
 }
 
7、多对多双向
 
@Entity
 public class Student {
 private int id;
 private String name;
 private Set<Teacher> teachers = new HashSet<Teacher>();
 @ManyToMany(mappedBy="students")
 public Set<Teacher> getTeachers() {
    return teachers;
 }
 public void setTeachers(Set<Teacher> teachers) {
    this.teachers = teachers;
 }
 @Id
 @GeneratedValue
 public int getId() {
    return id;
 }
 public void setId(int id) {
    this.id = id;
 }
 public String getName() {
    return name;
 }
 public void setName(String name) {
    this.name = name;
 }
 }
 
@Entity
 public class Teacher {
 private int id;
 private String name;
 private Set<Student> students = new HashSet<Student>();
 @Id
 @GeneratedValue
 public int getId() {
    return id;
 }
 public void setId(int 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="teacher_id")},
   inverseJoinColumns={@JoinColumn(name="student_id")}
    )
 public Set<Student> getStudents() {
    return students;
 }
 public void setStudents(Set<Student> students) {
    this.students = students;
 }
 }
 

注解意思介绍
  a) @Entity 映射一个实体类
       @Table 指定关联的表
 
    b) @Id 映射OID
 
    c) @GeneratedValue 指定OID的生成策略
 
          @GeneratedValue的属性strategy指定生成策略,
 
         IDENTITY(自增长方式,如mysql)
 
         SEQUENCE  (序列方式,如oracle)
 
        TABLE (表方式,该方式便于数据库移植,但效率不高,主键的值是从这个表中取得的。)
 
        AUTO (自动方式,该方式会把主键生成交给JPA的实现者来决定,Hibernate会根据底层数据库选择合适的方    式,如果用这种方式,可以不写,默认如此)
 
       例如:@GenericGenerator(name="uuid_s",strategy="uuid")

    d) @Version 映射版本号属性
 
    e) @Column 指定属性对应的列的信息
 
    f) @Temporal 指定日期时间的类型(TIMESTAMP,DATE,TIME)
 
    g) 简单属性可以不用注解。默认就是@Basic
 
    h) @Transient 指定属性不需要映射
 
    i) 复杂属性:关联,继承,组件,联合主键,集合

0 0
原创粉丝点击