您的位置:首页 > 其它

Hibernate之多对多单向关联(ManyToMany)

2017-08-30 18:00 405 查看
(一)基于注解的配置方式:

关联表名:主表表名+_下划线+从表表名, 关联到主表的外键名:主表名+_下划线+主表中的主键列名. 关联到从表的外键名:主表中用于关联的属性名+_下划线+从表的主键列名.
以上规则对于双向一对多关联同样有效.
@Entity
public class Store {
@ManyToMany
public Set<City> getImplantedIn() {
...
}
}

@Entity
public class City {
... //no bidirectional relationship(不是双向关联)
}

如果未指定关联表的名字以及外键的名字,Hibernate会自动设定。
如果想自己设定名字:可以通过@JoinTable(name="关联表名",joinColumns={@JoinColumn(name=“主表名”)},inverseJoinColumns={@JoinColumn(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;
}
@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;
}

}

(二)基于xml的配置方式:

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>
<class name="com.bjsxt.hibernate.Teacher">
<id name="id">
<generator class="native"></generator>
</id>

<property name="name"></property>
<set name="students" table="t_s">
<key column="teacher_id"></key>
<many-to-many class="com.bjsxt.hibernate.Student" column="student_id"/>
</set>

    </class>

</hibernate-mapping>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: