映射关系级别注解
来源:程序员人生 发布时间:2016-08-15 08:35:26 阅读次数:2986次
映照关系级别注解
1对1单向外键
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name="pid",unique=true)
注意:保存时应当先保存外键对象,在保存主表对象
实例:将环境配置好,所需要的包前边已提到过,
学生实体类:
package com.oto;
import java.util.Date;
import javax.persistence.CascadeType;
import javax.persistence.Entity;//JPA注解
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
/*
* 学生实体类
*/
@Entity
public class Students {
private int sid; //学号
private IdCard card;//身份证
private String gender;//性别
private Date birthday;//诞生日期
private String major;//专业
public Students(){
}
public Students(IdCard card, String gender,
Date date, String major) {
// super();
this.card = card;
this.gender = gender;
this.birthday = date;
this.major = major;
}
@Id
@GeneratedValue
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name="pid",unique=true)
public IdCard getCard() {
return card;
}
public void setCard(IdCard card) {
this.card = card;
}
}
身份证实体类:
package com.oto;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import org.hibernate.annotations.GenericGenerator;
@Entity
public class IdCard {
@Id
@GeneratedValue(generator="pid")
@GenericGenerator(name="pid",strategy="assigned")
@Column(length=18)
private String pid; //身份证号
private String sname;//姓名
public IdCard(){
}
public IdCard(String pid, String sname) {
this.pid = pid;
this.sname = sname;
}
public String getPid() {
return pid;
}
public void setPid(String pid) {
this.pid = pid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
}
测试类:
package com.oto;
import java.util.Date;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.junit.Test;
public class TestStudents {
@Test
public void testShemaExport(){
//创建hibernate配置对象
Configuration config = new Configuration().configure();
//创建服务注册对象
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
//生成SessionFactory
SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);
SchemaExport export = new SchemaExport(config);
export.create(true,true);
}
//往
数据库中添加学生数据
@Test
public void addStudents(){
//创建hibernate配置对象
Configuration config = new Configuration().configure();
//创建服务注册对象
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
//生成SessionFactory
SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);
//创建会话
Session session = sessionFactory.getCurrentSession();
//创建事务
Transaction tx = session.beginTransaction();
IdCard card = new IdCard("123456789012345678","猪8戒");
Students stu = new Students(card,"男",new Date(),"计算机");
session.save(card);
session.save(stu);
tx.commit();
}
}
hibernate.cfg.xml中的配置:下面的使用的是同1个配置,下边的代码中不再罗列,
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration⑶.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!--
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///hibernate_struts_stumanager</property>
-->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/mypage</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.show_sql">false</property>
<property name="hibernate.hbm2ddl.auto">create</property>
<property name="current_session_context_class">thread</property>
<!-- <mapping class="com.oto.Students"/>
<mapping class="com.oto.IdCard"/> --><!-- 1对1单向外键关联 -->
<!-- <mapping class="com.oto_11.Students"/>
<mapping class="com.oto_11.IdCard"/> --> <!--1对1双向外键关联 -->
<!-- <mapping class="com.mto.Students"/>
<mapping class="com.mto.ClassRoom"/> --><!-- 多对1单向外键关联-->
<!-- <mapping class="com.otm.Students"/>
<mapping class="com.otm.ClassRoom"/> --><!-- 1对多单向外键关联 -->
<!-- <mapping class="com.otm_11.Students"/>
<mapping class="com.otm_11.ClassRoom"/> --><!-- 1对多双向外键 -->
<!-- <mapping class="com.mtm.Students"/>
<mapping class="com.mtm.Teachers"/> --> <!-- 多对多单向外键关联 -->
<mapping class="com.mtm_11.Students"/>
<mapping class="com.mtm_11.Teachers"/> <!-- 多对多双向外键关联 -->
</session-factory>
</hibernate-configuration>
1对1双向外键关联
主控方的配置同1对1单向外键关联
@OneToOne(mappedBy="card")//被控方
双向关联,必须设置mappedBy属性。由于双向关联只能交给1方去控制,不可能在双方
都设置外键保存关联关系,否则双方都没法保存
实例:
学生实体类
package com.oto_11;
import java.util.Date;
import javax.persistence.CascadeType;
import javax.persistence.Entity;//JPA注解
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
/*
* 学生实体类
*/
@Entity
public class Students {
private int sid; //学号
private IdCard card;//身份证
private String gender;//性别
private Date birthday;//诞生日期
private String major;//专业
public Students(){
}
public Students(IdCard card, String gender,
Date date, String major) {
// super();
this.card = card;
this.gender = gender;
this.birthday = date;
this.major = major;
}
@Id
@GeneratedValue
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name="pid",unique=true)
public IdCard getCard() {
return card;
}
public void setCard(IdCard card) {
this.card = card;
}
}
身份证实体类:
package com.oto_11;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import org.hibernate.annotations.GenericGenerator;
@Entity
public class IdCard {
@Id
@GeneratedValue(generator="pid")
@GenericGenerator(name="pid",strategy="assigned")
@Column(length=18)
private String pid; //身份证号
private String sname;//姓名
@OneToOne(mappedBy="card")
private Students stu;
public IdCard(){
}
public IdCard(String pid, String sname) {
this.pid = pid;
this.sname = sname;
}
public Students getStu() {
return stu;
}
public void setStu(Students stu) {
this.stu = stu;
}
public String getPid() {
return pid;
}
public void setPid(String pid) {
this.pid = pid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
}
测试类:
package com.oto_11;
import java.util.Date;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.junit.Test;
public class TestStudents {
@Test
public void testShemaExport(){
//创建hibernate配置对象
Configuration config = new Configuration().configure();
//创建服务注册对象
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
//生成SessionFactory
SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);
SchemaExport export = new SchemaExport(config);
export.create(true,true);
}
@Test
public void addStudents(){
//创建hibernate配置对象
Configuration config = new Configuration().configure();
//创建服务注册对象
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
//生成SessionFactory
SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);
//创建会话
Session session = sessionFactory.getCurrentSession();
//创建事务
Transaction tx = session.beginTransaction();
IdCard card = new IdCard("123456789012345678","猪8戒");
Students stu = new Students(card,"男",new Date(),"计算机");
session.save(card);
session.save(stu);
tx.commit();
}
}
1对1单向外键联合主键
1对1双向外键联合主键
创建主键类
主键类必须实现serializable接口,重写hashCode()和equals()方法。
主键类
@Embeddable
实体类
@EmbeddedId
多对1单向外键关联
多方持有1方的援用
@ManyToOne(cascade={CascadeType.ALL},
fetch=FetchType.EAGER)
@JoinColumn(name="cid",referencedColumnName="CID")
学生实体类:
package com.mto;
import java.util.Date;
import javax.persistence.CascadeType;
import javax.persistence.Entity;//JPA注解
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
/*
* 学生实体类
*/
@Entity
public class Students {
private int sid; //学号
private String gender;//性别
private Date birthday;//诞生日期
private String major;//专业
private ClassRoom classroom;
private String sname;
public Students(){
}
public Students(String sname, String gender,
Date date, String major) {
// super();
this.sname = sname;
this.gender = gender;
this.birthday = date;
this.major = major;
}
@Id
@GeneratedValue
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
@ManyToOne(cascade={CascadeType.ALL},fetch=FetchType.EAGER)
@JoinColumn(name="cid",referencedColumnName="CID")
public ClassRoom getClassroom() {
return classroom;
}
public void setClassroom(ClassRoom classroom) {
this.classroom = classroom;
}
}
班级实体类:
package com.mto;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import org.hibernate.annotations.GenericGenerator;
//班级实体类
@Entity
public class ClassRoom {
@Id
@GeneratedValue(generator="cid")
@GenericGenerator(name="cid",strategy="assigned")
@Column(length=4)
private String cid;//班级的编号
private String cname;//班级的名字
public ClassRoom(){
}
public ClassRoom(String cid, String cname) {
this.cid = cid;
this.cname = cname;
}
public String getCid() {
return cid;
}
public void setCid(String cid) {
this.cid = cid;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
}
测试类:
package com.mto;
import java.util.Date;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.junit.Test;
public class TestStudents {
@Test
public void testShemaExport(){
//创建hibernate配置对象
Configuration config = new Configuration().configure();
//创建服务注册对象
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
//生成SessionFactory
SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);
SchemaExport export = new SchemaExport(config);
export.create(true,true);
}
//往
数据库中添加学生数据
@Test
public void addStudents(){
//创建hibernate配置对象
Configuration config = new Configuration().configure();
//创建服务注册对象
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
//生成SessionFactory
SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);
//创建会话
Session session = sessionFactory.getCurrentSession();
//创建事务
Transaction tx = session.beginTransaction();
//创建班级对象
ClassRoom c1 = new ClassRoom("0001","软件工程");
ClassRoom c2 = new ClassRoom("0002","通讯工程");
//创建学生对象
Students s1 = new Students("小王","男",new Date(),"计算机");
Students s2 = new Students("小黄","男",new Date(),"计算机");
Students s3 = new Students("小花","女",new Date(),"计算机");
Students s4 = new Students("小红","女",new Date(),"计算机");
s1.setClassroom(c1);
s2.setClassroom(c1);
s3.setClassroom(c2);
s4.setClassroom(c2);
session.save(c1);
session.save(c2);
session.save(s1);
session.save(s2);
session.save(s3);
session.save(s4);
tx.commit();
}
}
1对多单向外键关联
1方持有多方的集合
@OneToMany(cascade={cascadeType.ALL},fetch=FetchType.LAZY)
@JoinColumn(name="cid")
实例:
学生实体类:
package com.otm;
import java.util.Date;
import javax.persistence.CascadeType;
import javax.persistence.Entity;//JPA注解
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
/*
* 学生实体类
*/
@Entity
public class Students {
private int sid; //学号
private String gender;//性别
private Date birthday;//诞生日期
private String major;//专业
private String sname;
public Students(){
}
public Students(String sname, String gender,
Date date, String major) {
// super();
this.sname = sname;
this.gender = gender;
this.birthday = date;
this.major = major;
}
@Id
@GeneratedValue
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
}
班级实体类:
package com.otm;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import org.hibernate.annotations.GenericGenerator;
//班级实体类
@Entity
public class ClassRoom {
@Id
@GeneratedValue(generator="cid")
@GenericGenerator(name="cid",strategy="assigned")
@Column(length=4)
private String cid;//班级的编号
private String cname;//班级的名字
@OneToMany(cascade={CascadeType.ALL},fetch=FetchType.LAZY)
@JoinColumn(name="cid")
private Set<Students> stus;//1方持有多方的集合
public ClassRoom(){
}
public ClassRoom(String cid, String cname) {
this.cid = cid;
this.cname = cname;
}
public String getCid() {
return cid;
}
public void setCid(String cid) {
this.cid = cid;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
public Set<Students> getStus() {
return stus;
}
public void setStus(Set<Students> stus) {
this.stus = stus;
}
}
测试类:
package com.otm;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.junit.Test;
public class TestStudents {
@Test
public void testShemaExport(){
//创建hibernate配置对象
Configuration config = new Configuration().configure();
//创建服务注册对象
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
//生成SessionFactory
SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);
SchemaExport export = new SchemaExport(config);
export.create(true,true);
}
@Test
public void addStudents(){
//创建hibernate配置对象
Configuration config = new Configuration().configure();
//创建服务注册对象
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
//生成SessionFactory
SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);
//创建会话
Session session = sessionFactory.getCurrentSession();
//创建事务
Transaction tx = session.beginTransaction();
//创建班级对象
ClassRoom c1 = new ClassRoom("0001","软件工程");
ClassRoom c2 = new ClassRoom("0002","通讯工程");
//创建学生对象
Students s1 = new Students("小王","男",new Date(),"计算机");
Students s2 = new Students("小黄","男",new Date(),"计算机");
Students s3 = new Students("小花","女",new Date(),"计算机");
Students s4 = new Students("小红","女",new Date(),"计算机");
Set<Students> set1 = new HashSet<Students>();
set1.add(s1);
set1.add(s2);
Set<Students> set2 = new HashSet<Students>();
set2.add(s3);
set2.add(s4);
session.save(s1);
session.save(s2);
session.save(s3);
session.save(s4);
session.save(c1);
session.save(c2);
tx.commit();
}
}
1对多双向外键关联
多方:多方持有1方的援用
@ManyToOne(cascade={CascadeType.ALL},fetch=FetchType.EAGER)
@JoinColumn(name="cid")
1方:1方持有多方的集合
@OneToMany(cascade={CascadeType.ALL},fetch=FetchType.LAZY)
@JoinColumn(name="cid")
实例:
package com.otm_11;
import java.util.Date;
import javax.persistence.CascadeType;
import javax.persistence.Entity;//JPA注解
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
/*
* 学生实体类
*/
@Entity
public class Students {
private int sid; //学号
private String gender;//性别
private Date birthday;//诞生日期
private String major;//专业
private String sname;//姓名
private ClassRoom classroom;
public Students(){
}
public Students(String sname, String gender,
Date date, String major) {
// super();
this.sname = sname;
this.gender = gender;
this.birthday = date;
this.major = major;
}
@Id
@GeneratedValue
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
@ManyToOne(cascade={CascadeType.ALL},fetch=FetchType.EAGER)
@JoinColumn(name="cid")
public ClassRoom getClassroom() {
return classroom;
}
public void setClassroom(ClassRoom classroom) {
this.classroom = classroom;
}
}
班级实体类:
package com.otm_11;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import org.hibernate.annotations.GenericGenerator;
//班级实体类
@Entity
public class ClassRoom {
@Id
@GeneratedValue(generator="cid")
@GenericGenerator(name="cid",strategy="assigned")
@Column(length=4)
private String cid;//班级的编号
private String cname;//班级的名字
@OneToMany(cascade={CascadeType.ALL},fetch=FetchType.LAZY)
@JoinColumn(name="cid")
private Set<Students> stus;//1方持有多方的集合
public ClassRoom(){
}
public ClassRoom(String cid, String cname) {
this.cid = cid;
this.cname = cname;
}
public String getCid() {
return cid;
}
public void setCid(String cid) {
this.cid = cid;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
public Set<Students> getStus() {
return stus;
}
public void setStus(Set<Students> stus) {
this.stus = stus;
}
}
测试类:
package com.mto_11;
import java.util.Date;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.junit.Test;
import com.otm_11.ClassRoom;
import com.otm_11.Students;
public class TestStudents {
@Test
public void testShemaExport(){
//创建hibernate配置对象
Configuration config = new Configuration().configure();
//创建服务注册对象
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
//生成SessionFactory
SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);
SchemaExport export = new SchemaExport(config);
export.create(true,true);
}
@Test
public void addStudents(){
//创建hibernate配置对象
Configuration config = new Configuration().configure();
//创建服务注册对象
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
//生成SessionFactory
SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);
//创建会话
Session session = sessionFactory.getCurrentSession();
//创建事务
Transaction tx = session.beginTransaction();
//创建班级对象
ClassRoom c1 = new ClassRoom("0001","软件工程");
ClassRoom c2 = new ClassRoom("0002","通讯工程");
//创建学生对象
Students s1 = new Students("小王","男",new Date(),"计算机");
Students s2 = new Students("小黄","男",new Date(),"计算机");
Students s3 = new Students("小花","女",new Date(),"计算机");
Students s4 = new Students("小红","女",new Date(),"计算机");
s1.setClassroom(c1);
s2.setClassroom(c1);
s3.setClassroom(c2);
s4.setClassroom(c2);
session.save(c1);
session.save(c2);
session.save(s1);
session.save(s2);
session.save(s3);
session.save(s4);
tx.commit();
}
}
多对多单向外键关联
其中1个多方持有另外一个多方的集合对象
创建中间表
@MantToMany
@JoinTable(
name="teachers_students",
joinColumns={@JoinColumn(name="sid")},inverseJoinColumns={@JoinColumn(name="tid")}
)
实例:
学生实体类:
package com.mtm;
import java.util.Date;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Entity;//JPA注解
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
/*
* 学生实体类
*/
@Entity
public class Students {
private int sid; //学号
private String gender;//性别
private Date birthday;//诞生日期
private String major;//专业
private String sname;//学生姓名
private Set<Teachers> teachers; //学生持有教师的集合
public Students(){
}
public Students(String sname, String gender,
Date date, String major) {
// super();
this.sname = sname;
this.gender = gender;
this.birthday = date;
this.major = major;
}
@Id
@GeneratedValue
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
@ManyToMany
@JoinTable(
name="teachers_students",
joinColumns={@JoinColumn(name="sid")},
inverseJoinColumns={@JoinColumn(name="tid")}
)
public Set<Teachers> getTeachers() {
return teachers;
}
public void setTeachers(Set<Teachers> teachers) {
this.teachers = teachers;
}
}
老师实体类:
package com.mtm;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import org.hibernate.annotations.GenericGenerator;
//教师实体类
@Entity
public class Teachers {
@Id
@GeneratedValue(generator="tid")
@GenericGenerator(name="tid",strategy="assigned")
@Column(length=4)
private String tid;//教师id
private String tname;//教师名字
public Teachers(){
}
public Teachers(String tid, String tname) {
// super();
this.tid = tid;
this.tname = tname;
}
public String getTid() {
return tid;
}
public void setTid(String tid) {
this.tid = tid;
}
public String getTname() {
return tname;
}
public void setTname(String tname) {
this.tname = tname;
}
}
测试类:
package com.mtm;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.junit.Test;
public class TestStudents {
@Test
public void testShemaExport(){
//创建hibernate配置对象
Configuration config = new Configuration().configure();
//创建服务注册对象
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
//生成SessionFactory
SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);
SchemaExport export = new SchemaExport(config);
export.create(true,true);
}
@Test
public void addStudents(){
//创建hibernate配置对象
Configuration config = new Configuration().configure();
//创建服务注册对象
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
//生成SessionFactory
SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);
Session session = sessionFactory.getCurrentSession();
Transaction tx = session.beginTransaction();
//创建教师对象
Teachers t1 = new Teachers("0001","张老师");
Teachers t2 = new Teachers("0002","黄老师");
Teachers t3 = new Teachers("0003","李老师");
Teachers t4 = new Teachers("0004","王老师");
Students s1 = new Students("张3","男",new Date(),"计算机");
Students s2 = new Students("李4","男",new Date(),"计算机");
Students s3 = new Students("王5","女",new Date(),"通讯");
Students s4 = new Students("赵6","女",new Date(),"通讯");
Set<Teachers> set1 = new HashSet<Teachers>();
set1.add(t1);
set1.add(t2);
Set<Teachers> set2 = new HashSet<Teachers>();
set2.add(t3);
set2.add(t4);
Set<Teachers> set3 = new HashSet<Teachers>();
set3.add(t1);
set3.add(t3);
set3.add(t4);
Set<Teachers> set4 = new HashSet<Teachers>();
set4.add(t2);
set4.add(t3);
set4.add(t4);
s1.setTeachers(set1);
s2.setTeachers(set2);
s3.setTeachers(set3);
s4.setTeachers(set4);
session.save(t1);
session.save(t2);
session.save(t3);
session.save(t4);
session.save(s1);
session.save(s2);
session.save(s3);
session.save(s4);
tx.commit();
}
}
多对多双向外键关联
双方持有对方的集合对象,其中1方设置
//教师类
@ManyToMany(mappedBy="teachers")
另外一方
//学生类
@ManyToMany
@JoinTable(
name="teachers_students",
joinColumns={@JoinColumn(name="sid")},
inverseJoinColumns={@JoinColumn(name="tid")}
)
实例:
学生实体类:
package com.mtm_11;
import java.util.Date;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Entity;//JPA注解
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
/*
* 学生实体类
*/
@Entity
public class Students {
private int sid; //学号
private String gender;//性别
private Date birthday;//诞生日期
private String major;//专业
private String sname;//学生姓名
private Set<Teachers> teachers; //学生持有教师的集合
public Students(){
}
public Students(String sname, String gender,
Date date, String major) {
// super();
this.sname = sname;
this.gender = gender;
this.birthday = date;
this.major = major;
}
@Id
@GeneratedValue
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
@ManyToMany
@JoinTable(
name="teachers_students",
joinColumns={@JoinColumn(name="sid")},
inverseJoinColumns={@JoinColumn(name="tid")}
)
public Set<Teachers> getTeachers() {
return teachers;
}
public void setTeachers(Set<Teachers> teachers) {
this.teachers = teachers;
}
}
老师实体类:
package com.mtm_11;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import org.hibernate.annotations.GenericGenerator;
//教师实体类
@Entity
public class Teachers {
@Id
@GeneratedValue(generator="tid")
@GenericGenerator(name="tid",strategy="assigned")
@Column(length=4)
private String tid;//教师id
private String tname;//教师名字
@ManyToMany(mappedBy="teachers")
private Set<Students> stus;//教师持有学生的集合
public Teachers(){
}
public Teachers(String tid, String tname) {
// super();
this.tid = tid;
this.tname = tname;
}
public String getTid() {
return tid;
}
public void setTid(String tid) {
this.tid = tid;
}
public String getTname() {
return tname;
}
public void setTname(String tname) {
this.tname = tname;
}
}
测试类:
package com.mtm_11;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.junit.Test;
public class TestStudents {
@Test
public void testShemaExport(){
//创建hibernate配置对象
Configuration config = new Configuration().configure();
//创建服务注册对象
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
//生成SessionFactory
SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);
SchemaExport export = new SchemaExport(config);
export.create(true,true);
}
@Test
public void addStudents(){
//创建hibernate配置对象
Configuration config = new Configuration().configure();
//创建服务注册对象
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
//生成SessionFactory
SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);
Session session = sessionFactory.getCurrentSession();
Transaction tx = session.beginTransaction();
//创建教师对象
Teachers t1 = new Teachers("0001","张老师");
Teachers t2 = new Teachers("0002","黄老师");
Teachers t3 = new Teachers("0003","李老师");
Teachers t4 = new Teachers("0004","王老师");
Students s1 = new Students("张3","男",new Date(),"计算机");
Students s2 = new Students("李4","男",new Date(),"计算机");
Students s3 = new Students("王5","女",new Date(),"通讯");
Students s4 = new Students("赵6","女",new Date(),"通讯");
Set<Teachers> set1 = new HashSet<Teachers>();
set1.add(t1);
set1.add(t2);
Set<Teachers> set2 = new HashSet<Teachers>();
set2.add(t3);
set2.add(t4);
Set<Teachers> set3 = new HashSet<Teachers>();
set3.add(t1);
set3.add(t3);
set3.add(t4);
Set<Teachers> set4 = new HashSet<Teachers>();
set4.add(t2);
set4.add(t3);
set4.add(t4);
s1.setTeachers(set1);
s2.setTeachers(set2);
s3.setTeachers(set3);
s4.setTeachers(set4);
session.save(t1);
session.save(t2);
session.save(t3);
session.save(t4);
session.save(s1);
session.save(s2);
session.save(s3);
session.save(s4);
tx.commit();
}
}
这里罗列了几个简单的例子,大神直接略过啊~~~~
生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠