Hibernate 的多表关系

hibernate表关联的各种配置:

1、多对多单向:

user----->role

user.hbm.xml:

role.hbm.xml:

2、多对多双向:

user.hbm.xml:

role.hbm.xml:




3、一对多单向:

student(多)----->classes(一)

student.hbm.xml:

classes.hbm.xml:

//classesid是在student表中加的一字段列名

4、一对多双向:

student(多)----->classes(一)

student.hbm.xml:

classes.hbm.xml:

//inverse表示维护关系反转,true表示失效,不由classes

//这端来维护。cascade表示级联,即当对classes操作时,发现还未有student持久化,会自动持久化student的

5、一对一主键关联(单向关联Person---->IdCard)

一对一主键关联映射:让两个实体对象的id保持相同,这样可以避免多余的字段被创建

Person.Java

view plaincopy to clipboardprint?

package com.bjsxt.hibernate;

public class Person {

private int id;

private String name;

private IdCard idCard;

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;

}

public IdCard getIdCard() {

return idCard;

}

public void setIdCard(IdCard idCard) {

this.idCard = idCard;

}

}

package com.bjsxt.hibernate;

public class Person {

private int id;

private String name;

private IdCard idCard;

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;

}

public IdCard getIdCard() {

return idCard;

}

public void setIdCard(IdCard idCard) {

this.idCard = idCard;

}

}

Person.hbm.xml://其对应的表中只有id,name两个属性


"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

//主键生成方式受制于IdCard主键生成方式

idCard

IdCard.java:

view plaincopy to clipboardprint?

package com.bjsxt.hibernate;

public class IdCard {

private int id;

private String cardNo;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getCardNo() {

return cardNo;

}

public void setCardNo(String cardNo) {

this.cardNo = cardNo;

}

}

package com.bjsxt.hibernate;

public class IdCard {

private int id;

private String cardNo;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getCardNo() {

return cardNo;

}

public void setCardNo(String cardNo) {

this.cardNo = cardNo;

}

}

IdCard.hbm.xml:


"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

6、一对一主键关联(双向Person<-------->IdCard)

与一对一主键关联(单向)大体一致,只不过IdCard.hbm.xml的配置里要一个one-to-ont属性,IdCard.java里加一个Person的引用。

IdCard.java:

view plaincopy to clipboardprint?

package com.bjsxt.hibernate;

public class IdCard {

private int id;

private String cardNo;

private Person person;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getCardNo() {

return cardNo;

}

public void setCardNo(String cardNo) {

this.cardNo = cardNo;

}

public Person getPerson() {

return person;

}

public void setPerson(Person person) {

this.person = person;

}

}

package com.bjsxt.hibernate;

public class IdCard {

private int id;

private String cardNo;

private Person person;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getCardNo() {

return cardNo;

}

public void setCardNo(String cardNo) {

this.cardNo = cardNo;

}

public Person getPerson() {

return person;

}

public void setPerson(Person person) {

this.person = person;

}

}

IdCard.hbm.xml:

view plaincopy to clipboardprint?


"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">


"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

7、一对一唯一外键关联(单向Person----->IdCard)

其实是多对对一的一个特例。

Person.java

view plaincopy to clipboardprint?

package com.bjsxt.hibernate;

public class Person {

private int id;

private String name;

private IdCard idCard;

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;

}

public IdCard getIdCard() {

return idCard;

}

public void setIdCard(IdCard idCard) {

this.idCard = idCard;

}

}

package com.bjsxt.hibernate;

public class Person {

private int id;

private String name;

private IdCard idCard;

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;

}

public IdCard getIdCard() {

return idCard;

}

public void setIdCard(IdCard idCard) {

this.idCard = idCard;

}

}

Person.hbm.xml

view plaincopy to clipboardprint?


"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">


"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

IdCard.java

view plaincopy to clipboardprint?

package com.bjsxt.hibernate;

public class IdCard {

private int id;

private String cardNo;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getCardNo() {

return cardNo;

}

public void setCardNo(String cardNo) {

this.cardNo = cardNo;

}

}

package com.bjsxt.hibernate;

public class IdCard {

private int id;

private String cardNo;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getCardNo() {

return cardNo;

}

public void setCardNo(String cardNo) {

this.cardNo = cardNo;

}

}

IdCard.hbm.xml

view plaincopy to clipboardprint?


"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">


"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

8、一对一唯一外键关联(双向Person<----->IdCard)

相对于上面的一对一唯一外键关联(单向)不同的是,IdCard.java添加了Person的引用与IdCard.hbm.xml添加了one-to-one标签。

IdCard.java:

view plaincopy to clipboardprint?

package com.bjsxt.hibernate;

public class IdCard {

private int id;

private String cardNo;

private Person person;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getCardNo() {

return cardNo;

}

public void setCardNo(String cardNo) {

this.cardNo = cardNo;

}

public Person getPerson() {

return person;

}

public void setPerson(Person person) {

this.person = person;

}

}

package com.bjsxt.hibernate;

public class IdCard {

private int id;

private String cardNo;

private Person person;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getCardNo() {

return cardNo;

}

public void setCardNo(String cardNo) {

this.cardNo = cardNo;

}

public Person getPerson() {

return person;

}

public void setPerson(Person person) {

this.person = person;

}

}

IdCard.hbm.xml:

view plaincopy to clipboardprint?


"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,767评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,981评论 19 139
  • 一. Java基础部分.................................................
    wy_sure阅读 3,837评论 0 11
  • Hibernate: 一个持久化框架 一个ORM框架 加载:根据特定的OID,把一个对象从数据库加载到内存中OID...
    JHMichael阅读 2,000评论 0 27
  • 莫楦看着古色古香的房子,这已经是她在这里的第三天了,终于在她认为最狗血最不可能最不可思议的事情发生了。她—...
    幸运子莎阅读 182评论 0 1