首页 技术 正文
技术 2022年11月7日
0 收藏 773 点赞 979 浏览 2843 个字

【Hibernate】之关于多对多单向关联映射

老师和学生,最典型的多对多关联,

Teacher和Student。所谓单向意思就是说。老师知道自己的教的是哪些学生而学生不知道是哪些老师教。

也能够这么说,在查询的时候,通过老师能够级联查询出学生,可是通过学生不能够级联查询出老师。

而多对多最麻烦的是怎么自己定义我们中间表的,表名和列名,这个是重要的!

Annotations配置

@Entity
@Table(name="t_teacher")
publicclass Teacher {
private Integer id;
private String name;
private Set<Student> students=new HashSet<Student>();//set不同意反复,最适合数据库模型
@Id
@GeneratedValue
public Integer getId() {
returnid;
}
publicvoid setId(Integerid) {
this.id = id;
}
@Column(name="t_name")
public String getName() {
returnname;
}
publicvoid setName(Stringname) {
this.name = name;
}
@ManyToMany
@JoinTable(name="t_s_two",//自己定义表名
joinColumns={@JoinColumn(name="teacher_id")},//自己定义列名
inverseJoinColumns={@JoinColumn(name="student_id")})//反转。和Teacher相应的那个表的列名,也是自己定义
public Set<Student>getStudents() {
returnstudents;
}
publicvoidsetStudents(Set<Student> students) {
this.students = students;
}
}
@Entity
@Table(name="t_student")
publicclass Student {
private Integer id;
private String name;
private Integer age;
@Id
@GeneratedValue
public Integer getId() {
returnid;
}
publicvoid setId(Integerid) {
this.id = id;
}
@Column(name="s_name")
public String getName() {
returnname;
}
publicvoid setName(Stringname) {
this.name = name;
}
@Column(name="s_age")
public Integer getAge() {
returnage;
}
publicvoid setAge(Integerage) {
this.age = age;
}
}

XML配置

publicclass Teacher {
private Integer id;
private String name;
private Set<Student> students=newHashSet<Student>();//set不同意反复,最适合数据库模型
public Integer getId() {
returnid;
}
publicvoid setId(Integerid) {
this.id = id;
}
public String getName() {
returnname;
}
publicvoid setName(Stringname) {
this.name = name;
}
public Set<Student>getStudents() {
returnstudents;
}
publicvoidsetStudents(Set<Student> students) {
this.students = students;
}
}
publicclass Student {
private Integer id;
private String name;
private Integer age;
public Integer getId() {
returnid;
}
publicvoid setId(Integerid) {
this.id = id;
}
public String getName() {
returnname;
}
publicvoid setName(Stringname) {
this.name = name;
}
public Integer getAge() {
returnage;
}
publicvoid setAge(Integerage) {
this.age = age;
}
}
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="csg.hibernate.entity">
<class name="Teacher" table="t_teacher">
<id name="id">
<column name="id"/>
<generator class="native" />
</id>
<property name="name" />
<set name="students" table="t_s_two"><!—-自己定义表名-->
<key column="teacher_id"/><!—自己定义列名-->
<many-to-many class="csg.hibernate.entity.Student" column="student_id"/><!—自己定义列名-->
</set>
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="csg.hibernate.entity">
<class name="Student" table="t_student">
<id name="id">
<column name="id"/>
<generator class="native" />
</id>
<property name="name" />
<property name="age" />
</class>
</hibernate-mapping>

以上就是XML的many-to-many(单向)的配置方法,ok!

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,030
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,520
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,368
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,147
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,781
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,859