hibernate之多对多双向关联

Annotation版本:

Teacher类:

package com.hibernate.model;
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.JoinColumns;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;

@Entity
@Table(name="_Teacher")
public class Teacher {
private int id;
private String name;
private Set<Student> student = new HashSet<Student>();
@Id
@GeneratedValue
public int getId() {
	return id;
}
public void setId(int id) {
	this.id = id;
}
public String getName() {
	return name;
}
@ManyToMany
@JoinTable(name="t_s",
joinColumns={@JoinColumn(name="teacher_id")},
inverseJoinColumns={@JoinColumn(name="student_id")})
public Set<Student> getStudent() {
	return student;
}
public void setStudent(Set<Student> student) {
	this.student = student;
}
public void setName(String name) {
	this.name = name;
}

}
Student类:

package com.hibernate.model;
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.ManyToMany;
import javax.persistence.Table;

@Entity
@Table(name="_Student")
public class Student {
private int id;
private String name;
private Set<Teacher> teacher = new HashSet<Teacher>();
@ManyToMany(mappedBy="student")
public Set<Teacher> getTeacher() {
	return teacher;
}
public void setTeacher(Set<Teacher> teacher) {
	this.teacher = teacher;
}
@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;
}

}
测试用例:

	@Test
	public void testSchemaExport(){
		new SchemaExport(new AnnotationConfiguration().configure()).create(false, true);
	}
	
测试结果:

21:19:02,538 DEBUG SchemaExport:377 - 
    create table _Student (
        id integer not null auto_increment,
        name varchar(255),
        primary key (id)
    )
21:19:02,549 DEBUG SchemaExport:377 - 
    create table _Teacher (
        id integer not null auto_increment,
        name varchar(255),
        primary key (id)
    )
21:19:02,555 DEBUG SchemaExport:377 - 
    create table t_s (
        teacher_id integer not null,
        student_id integer not null,
        primary key (teacher_id, student_id)
    )
21:19:02,577 DEBUG SchemaExport:377 - 
    alter table t_s 
        add index FK1BF6857018E8C (teacher_id), 
        add constraint FK1BF6857018E8C 
        foreign key (teacher_id) 
        references _Teacher (id)
21:19:02,587 DEBUG SchemaExport:377 - 
    alter table t_s 
        add index FK1BF68466643EC (student_id), 
        add constraint FK1BF68466643EC 
        foreign key (student_id) 
        references _Student (id)
21:19:02,625  INFO SchemaExport:268 - schema export complete
xml版本:

Student.hbm.xml:

<?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="com.hibernate.model">

    <class name="Student" table="_Student">
    <id name="id">
    <generator class="native"/>
    </id>
    <property name="name"></property>
     <set name="teacher" table="t_s">
    <key column="student_id"></key>
    <many-to-many class="com.hibernate.model.Teacher" column="teacher_id"/>
    </set>
    </class>
</hibernate-mapping>
Teacher.hbm.xml:
<?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="com.hibernate.model">
    <class name="Teacher" table="_Teacher">
    <id name="id">
    <generator class="native"/>
    </id>
    <property name="name"></property>
    <set name="student" table="t_s">
    <key column="teacher_id"></key>
    <many-to-many class="com.hibernate.model.Student" column="student_id"/>
    </set>
    </class>
</hibernate-mapping>
尊重版权,转载请注明本文链接

                                       欢迎关注行者摩罗微信公众号(xingzhemoluo),共同交流编程经验,扫描下方二维码即可;

                                                                 







  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hibernate 多对多关联是指两个实体之间存在多对多的关系。在 Hibernate 中,可以通过使用`@ManyToMany`注解来实现多对多关联。 首先,需要定义两个实体类,假设为`EntityA`和`EntityB`,它们之间存在多对多的关系。 ```java @Entity public class EntityA { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; // other fields and mappings @ManyToMany @JoinTable( name = "a_b", joinColumns = @JoinColumn(name = "a_id"), inverseJoinColumns = @JoinColumn(name = "b_id") ) private Set<EntityB> entityBs = new HashSet<>(); // getters and setters } @Entity public class EntityB { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; // other fields and mappings @ManyToMany(mappedBy = "entityBs") private Set<EntityA> entityAs = new HashSet<>(); // getters and setters } ``` 在上述代码中,`EntityA`类中使用了`@ManyToMany`注解来表示与`EntityB`的多对多关联。通过`@JoinTable`注解来指定关联表的名称和两个实体之间的外键列。`joinColumns`指定了对应`EntityA`的外键列名,`inverseJoinColumns`指定了对应`EntityB`的外键列名。 在`EntityB`类中,使用了`@ManyToMany(mappedBy = "entityBs")`注解来指定与`EntityA`的关联关系。通过`mappedBy`属性指定了`EntityA`中关联字段的名称。 这样,`EntityA`和`EntityB`之间就建立了多对多关联。可以通过在代码中操作`entityAs`和`entityBs`集合来实现多对多关联的操作。 同时,还需要在 Hibernate 的配置文件中配置相关的映射信息,以及其他必要的配置。 以上就是 Hibernate 中实现多对多关联的基本步骤,希望能对你有所帮助!如有更多问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值