package com.jpa.demo.com.jpa.demo.domain;
import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;
/**
* @author : mint6
* @date : 2018/10/22
* @description:
*/
@Entity
@Table(name = "student")//指定对应的表名称,如果指定的表名数据库不存在,程序会自己在数据库创建一个表
public class Student {
@Id
@GeneratedValue
private Integer id;
private String name;
private String classes;
private String sex;
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)//cascade级联状态,fetch是懒加载还是立即
@JoinTable(
name = "teacher_test",//中间表名称,如果没有这个表,程序启动后,自动在数据库创建
//ForeignKey指定外键,none是没有;ConstraintMode.NO_CONSTRAINT是不创建
foreignKey = @ForeignKey(name = "none", value = ConstraintMode.NO_CONSTRAINT),
//joinColumns 是主控方给当前类指定关联,name是当前类student的属性关联的中间表属性sid,
// referencedColumnName 是当前类的属性student实体类的id
joinColumns = {@JoinColumn(name = "sid", referencedColumnName = "id", nullable = false)},
//inverseJoinColumns也就是被控方的属性,
// referencedColumnName后面写Teacher的属性id,JoinColumn写中间表的属性名称
inverseJoinColumns = {@JoinColumn(name = "tid", referencedColumnName = "id", nullable = false
)})
private Set<Teacher> teacher = new HashSet<Teacher>();//这个被控方一般使用Set列表
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 String getClasses() {
return classes;
}
public void setClasses(String classes) {
this.classes = classes;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Set<Teacher> getTeacher() {
return teacher;
}
public void setTeacher(Set<Teacher> teacher) {
this.teacher = teacher;
}
}
当前类主控方,作为属性的类被控方。
上控 下被控,前面关系表,后面真实类。
这个表在数据库是这样的,teacher_test是中间表,也就是关联两个类关系的表,这里写好后,启动程序,程序会创建表。
帮助理解:
属性 | 是否必须 | 说明 |
---|---|---|
name | 否 | 指定该连接表的表名 |
JoinColumns | 否 | 该属性值可接受多个@JoinColumn ,用于配置连接表 中外键列的信息,这些外键列参照当前实体对应表 的主键列 |
inverseJoinColumns | 否 | 该属性值可接受多个@JoinColumn ,用于配置连接表 中外键列的信息,这些外键列参照当前实体的关联实体对应表 的主键列 |
targetEntity | 否 | 该属性指定关联实体 的类名。在默认情况下,Hibernate将通过反射来判断关联实体的类名 |
catalog | 否 | 设置将该连接表放入指定的catalog中。如果没有指定该属性,连接表将放入默认的catalog |
schema | 否 | 设置将该连接表放入指定的schema中。如果没有指定该属性,连接表将放入默认的schema |
uniqueConstraints | 否 | 该属性用于为连接表 增加唯一约束 |
indexes | 否 | 该属性值为@Index 注解数组,用于为该连接表定义多个索引 |