为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

Hibernate_关联关系映射配置

2017-11-28 50页 doc 345KB 13阅读

用户头像

is_792768

暂无简介

举报
Hibernate_关联关系映射配置Hibernate_关联关系映射配置 Hibernate关联关系映射配置 ...................................................................................................... 3 一、 一对一单向外键关联: .......................................................................................... 3 1.1目录结构 ..........
Hibernate_关联关系映射配置
Hibernate_关联关系映射配置 Hibernate关联关系映射配置 ...................................................................................................... 3 一、 一对一单向外键关联: .......................................................................................... 3 1.1结构 ................................................................................................................... 3 1.2 Annotation方式 .................................................................................................... 3 1.3 XML方式 ................................................................................................................. 5 1.4 Hibernate配置文件 ............................................................................................... 8 二、一对一双向外键关联 ...................................................................................................... 9 2.1 Annotation方式 .................................................................................................... 9 2.2 XML方式 ............................................................................................................... 11 三、一对一单向主键关联,不重要, ................................................................................ 13 3.1 Annotation方式 .................................................................................................. 13 3.2 XML方式 ............................................................................................................... 16 四、一对一双向主键关联,不重要, ................................................................................ 18 4.1 Annotation方式 .................................................................................................. 18 3.2 XML方式 ............................................................................................................... 21 五、组件映射 ........................................................................................................................ 23 5.1 Annotation方式 .................................................................................................. 23 5.2 XML方式 ............................................................................................................... 25 六、多对一单向关联 ............................................................................................................ 28 6.1 Annotation方式 .................................................................................................. 28 6.2 XML方式 ............................................................................................................... 30 七、一对多单向关联 ............................................................................................................ 32 1 7.1 Annotation方式 .................................................................................................. 32 7.2 XML方式 ............................................................................................................... 35 八、一对多、多对一双向关联 ............................................................................................ 37 8.1 Annotation方式 .................................................................................................. 37 8.2 XML方式 ............................................................................................................... 40 九、多对多单向关联 ............................................................................................................ 43 8.1 Annotation方式 .................................................................................................. 43 8.2 XML方式 ............................................................................................................... 45 十、多对多双向关联 ............................................................................................................ 48 8.1 Annotation方式 .................................................................................................. 48 8.2 XML方式 ............................................................................................................... 51 2 Hibernate关联关系映射配置 一、 一对一单向外键关联: 1.1目录结构 图1-1 目录结构图 1.2 Annotation方式 1.2.1 类图 图1-2 类关联关系图 1.2.2数据库表结构 3 H_HUSBAND_ IDNUMBER(4) NAMEVARCHAR2(30 char) WIFE_IDNUMBER(4)FK133651BB21A8E0C8H_WIFE_ IDNUMBER(4) NAMEVARCHAR2(30 char) 图1-3数据库表结构图 1.2.3 实体类 package com.rongqq.hibernate3.annotation.entity; import java.math.BigDecimal; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.OneToOne; import javax.persistence.SequenceGenerator; @Entity(name="H_HUSBAND_") @SequenceGenerator(name="husband_seq_gene", sequenceName="HUSBAND_SEQ", allocationSize=1) public class Husband { private BigDecimal id; private String name; private Wife wife; @Id @Column(precision=4, scale=0) @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="husband_seq_gene") public BigDecimal getId() { return id; } @Column(length=30) public String getName() { return name; } @OneToOne //@JoinColumn(name="wife_id")//不写也没问,自动生成的字段也叫wife_id public Wife getWife() { return wife; } public void setId(BigDecimal id) { 4 this.id = id; } public void setName(String name) { this.name = name; } public void setWife(Wife wife) { this.wife = wife; } } package com.rongqq.hibernate3.annotation.entity; import java.math.BigDecimal; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.SequenceGenerator; @Entity(name="H_WIFE_") @SequenceGenerator(name="wife_seq_gene", sequenceName="WIFE_SEQ") public class Wife { private BigDecimal id; private String name; @Id @Column(precision=4) SEQUENCE, generator="wife_seq_gene") @GeneratedValue(strategy=GenerationType. public BigDecimal getId() { return id; } public void setId(BigDecimal id) { this.id = id; } @Column(length=30) public String getName() { return name; } public void setName(String name) { this.name = name; } } 1.3 XML方式 1.3.1 类图 5 图1-4 类关联关系图 1.3.2 数据库表结构 H_HUSBAND_XML IDNUMBER(4) NAMEVARCHAR2(30 char) WIFE_IDNUMBER(19,2) FKBE32645CF8BD16F4 H_WIFE_XML IDNUMBER(4) NAMEVARCHAR2(30 char) 图1-5数据库表结构图 1.3.3 实体类 package com.rongqq.hibernate3.xml.entity; import java.math.BigDecimal; public class XML_Husband { private BigDecimal id; private String name; private XML_Wife wife; public BigDecimal getId() { return id; } public String getName() { return name; } public XML_Wife getWife() { return wife; } public void setId(BigDecimal id) { this.id = id; } 6 public void setName(String name) { this.name = name; } public void setWife(XML_Wife wife) { this.wife = wife; } } package com.rongqq.hibernate3.xml.entity; import java.math.BigDecimal; public class XML_Wife { private BigDecimal id; private String name; public BigDecimal getId() { return id; } public void setId(BigDecimal id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 1.3.4 对象关系映射文件 "id""4""0" "sequence" H_STUDENT_SEQ_XML 7 "id""4""0" "sequence" H_STUDENT_SEQ_XML "sequence" "name""30" 1.4 Hibernate配置文件 oracle.jdbc.driver.OracleDriver jdbc:oracle:thin:@127.0.0.1:1521:silence cnuser cn830306 1 thread org.hibernate.cache.NoCacheProvider true true org.hibernate.dialect.Oracle9Dialect 8 /> 二、一对一双向外键关联 2.1 Annotation方式 2.1.1 类图 图2-1类关联关系图 2.1.2 数据库结构图 H_HUSBAND_ IDNUMBER(4) NAMEVARCHAR2(30 char) WIFE_IDNUMBER(4) FK133651BB21A8E0C8 H_WIFE_ IDNUMBER(4) NAMEVARCHAR2(30 char) 图2-2数据库表结构图 2.1.3 实体类 @Entity(name="H_HUSBAND_") @SequenceGenerator(name="husband_seq_gene", sequenceName="HUSBAND_SEQ", allocationSize=1) public class Husband { private BigDecimal id; private String name; private Wife wife; @Id @Column(precision=4, scale=0) @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="husband_seq_gene") public BigDecimal getId() { 9 return id; } @Column(length=30) public String getName() { return name; } @OneToOne //@JoinColumn(name="wife_id")//不写也没问题,自动生成的字段也叫wife_id public Wife getWife() { return wife; } public void setId(BigDecimal id) { this.id = id; } public void setName(String name) { this.name = name; } public void setWife(Wife wife) { this.wife = wife; } } @Entity(name="H_WIFE_") @SequenceGenerator(name="wife_seq_gene", sequenceName="WIFE_SEQ") public class Wife { private BigDecimal id; private String name; private Husband husband; @Id @Column(precision=4) SEQUENCE, generator="wife_seq_gene") @GeneratedValue(strategy=GenerationType. public BigDecimal getId() { return id; } public void setId(BigDecimal id) { this.id = id; } @Column(length=30) public String getName() { return name; } public void setName(String name) { this.name = name; } @OneToOne(mappedBy="wife") 10 public Husband getHusband() { return husband; } public void setHusband(Husband husband) { this.husband = husband; } } 2.2 XML方式 2.2.1 类图 图2-3 类关联关系图 2.2.2 数据库结构图 H_HUSBAND_XML IDNUMBER(4) NAMEVARCHAR2(30 char) WIFE_IDNUMBER(4,2) FKBE32645CF8BD16F4 H_WIFE_XML IDNUMBER(4) NAMEVARCHAR2(30 char) 2.2.3 实体类 package com.rongqq.hibernate3.xml.entity; import java.math.BigDecimal; public class XML_Husband { private BigDecimal id; private String name; private XML_Wife wife; public BigDecimal getId() { return id; } public String getName() { return name; } 11 public XML_Wife getWife() { return wife; } public void setId(BigDecimal id) { this.id = id; } public void setName(String name) { this.name = name; } public void setWife(XML_Wife wife) { this.wife = wife; } } package com.rongqq.hibernate3.xml.entity; import java.math.BigDecimal; public class XML_Wife { private BigDecimal id; private String name; private XML_Husband husband; public BigDecimal getId() { return id; } public void setId(BigDecimal id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public XML_Husband getHusband() { return husband; } public void setHusband(XML_Husband husband) { this.husband = husband; } } 2.2.4 对象关系映射文件 12 > "XML_Husband""H_HUSBAND_XML""true" H_STUDENT_SEQ_XML "wife""true""true" "wife_id""4" "1.0" H_STUDENT_SEQ_XML 三、一对一单向主键关联,不重要, 3.1 Annotation方式 3.1.1 类图 13 图3-1 类关联关系图 3.1.2 数据库表结构 H_WIFE_H_HUSBAND_IDNUMBER(4)IDNUMBER(4)NAMEVARCHAR2(30 char)NAMEVARCHAR2(30 char) 图3-2 数据库表结构图 3.1.3 实体类 package com.rongqq.hibernate3.annotation.entity; import java.math.BigDecimal; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.OneToOne; import javax.persistence.PrimaryKeyJoinColumn; import javax.persistence.SequenceGenerator; @Entity(name="H_HUSBAND_") @SequenceGenerator(name="husband_seq_gene", sequenceName="HUSBAND_SEQ", allocationSize=1) public class Husband { private BigDecimal id; private String name; private Wife wife; @Id @Column(precision=4, scale=0) @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="husband_seq_gene") public BigDecimal getId() { return id; } @Column(length=30) public String getName() { 14 return name; } @OneToOne @PrimaryKeyJoinColumn public Wife getWife() { return wife; } public void setId(BigDecimal id) { this.id = id; } public void setName(String name) { this.name = name; } public void setWife(Wife wife) { this.wife = wife; } } package com.rongqq.hibernate3.annotation.entity; import java.math.BigDecimal; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.SequenceGenerator; @Entity(name="H_WIFE_") @SequenceGenerator(name="wife_seq_gene", sequenceName="WIFE_SEQ") public class Wife { private BigDecimal id; private String name; @Id @Column(precision=4) SEQUENCE, generator="wife_seq_gene") @GeneratedValue(strategy=GenerationType. public BigDecimal getId() { return id; } public void setId(BigDecimal id) { this.id = id; } @Column(length=30) public String getName() { return name; } public void setName(String name) { 15 this.name = name; } } 注:只生成了表,但是没有外键约束,具体实现还需要查找 3.2 XML方式 3.2.1 类图 图3-3 类关联关系图 3.2.2 数据库表结构 H_HUSBAND_XML IDNUMBER(4) NAMEVARCHAR2(30 char) FKBE32645CA8BE0706 H_WIFE_XML IDNUMBER(4) NAMEVARCHAR2(30 char) 图3-4 数据库表结构图 3.2.3 实体类 package com.rongqq.hibernate3.xml.entity; import java.math.BigDecimal; public class XML_Husband { private BigDecimal id; private String name; private XML_Wife wife; 16 public BigDecimal getId() { return id; } public String getName() { return name; } public XML_Wife getWife() { return wife; } public void setId(BigDecimal id) { this.id = id; } public void setName(String name) { this.name = name; } public void setWife(XML_Wife wife) { this.wife = wife; } } package com.rongqq.hibernate3.xml.entity; import java.math.BigDecimal; import com.rongqq.hibernate3.annotation.entity.Husband; public class XML_Wife { private BigDecimal id; private String name; public BigDecimal getId() { return id; } public void setId(BigDecimal id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 3.2.4 对象映射文件 17 > "XML_Husband""H_HUSBAND_XML""true" wife "name""30" "wife""true" "1.0" H_STUDENT_SEQ_XML 四、一对一双向主键关联,不重要, 4.1 Annotation方式 4.1.1 类图 图4-1 类关联关系图 18 4.1.2 数据库表结构 H_HUSBAND_ IDNUMBER(4) NAMEVARCHAR2(30 char)H_WIFE_ IDNUMBER(4) NAMEVARCHAR2(30 char) 图4-2 数据库表结构图 4.1.3 实体类 package com.rongqq.hibernate3.annotation.entity; import java.math.BigDecimal; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.OneToOne; import javax.persistence.PrimaryKeyJoinColumn; import javax.persistence.SequenceGenerator; @Entity(name="H_HUSBAND_") @SequenceGenerator(name="husband_seq_gene", sequenceName="HUSBAND_SEQ", allocationSize=1) public class Husband { private BigDecimal id; private String name; private Wife wife; @Id @Column(precision=4, scale=0) @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="husband_seq_gene") public BigDecimal getId() { return id; } @Column(length=30) public String getName() { return name; } @OneToOne @PrimaryKeyJoinColumn public Wife getWife() { return wife; 19 } public void setId(BigDecimal id) { this.id = id; } public void setName(String name) { this.name = name; } public void setWife(Wife wife) { this.wife = wife; } } package com.rongqq.hibernate3.annotation.entity; import java.math.BigDecimal; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.OneToOne; import javax.persistence.PrimaryKeyJoinColumn; import javax.persistence.SequenceGenerator; @Entity(name="H_WIFE_") @SequenceGenerator(name="wife_seq_gene", sequenceName="WIFE_SEQ") public class Wife { private BigDecimal id; private String name; private Husband husband; @Id @Column(precision=4) SEQUENCE, generator="wife_seq_gene") @GeneratedValue(strategy=GenerationType. public BigDecimal getId() { return id; } public void setId(BigDecimal id) { this.id = id; } @Column(length=30) public String getName() { return name; } public void setName(String name) { this.name = name; } @OneToOne 20 @PrimaryKeyJoinColumn public Husband getHusband() { return husband; } public void setHusband(Husband husband) { this.husband = husband; } } 注:同样不产生关联关系,具体实现待查 3.2 XML方式 4.2.1 类图 图4-3 类关联关系图 4.2.2 数据库表结构 H_HUSBAND_XML IDNUMBER(4) NAMEVARCHAR2(30 char) FKBE32645CA8BE0706 H_WIFE_XML IDNUMBER(4) NAMEVARCHAR2(30 char) 图4-4 数据库表结构图 4.2.3 实体类 package com.rongqq.hibernate3.xml.entity; import java.math.BigDecimal; public class XML_Husband { private BigDecimal id; private String name; private XML_Wife wife; 21 public BigDecimal getId() { return id; } public String getName() { return name; } public XML_Wife getWife() { return wife; } public void setId(BigDecimal id) { this.id = id; } public void setName(String name) { this.name = name; } public void setWife(XML_Wife wife) { this.wife = wife; } } package com.rongqq.hibernate3.xml.entity; import java.math.BigDecimal; public class XML_Wife { private BigDecimal id; private String name; private XML_Husband husband; public BigDecimal getId() { return id; } public void setId(BigDecimal id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public XML_Husband getHusband() { return husband; } public void setHusband(XML_Husband husband) { this.husband = husband; } } 22 4.2.4 对象映射文件 "id""4""0" "foreign" wife "property" "name""30" H_STUDENT_SEQ_XML 五、组件映射 5.1 Annotation方式 5.1.1 类图 23 图5-1 类关联关系图 5.1.2 数据库表结构 H_HUSBAND_ IDNUMBER(4) NAMEVARCHAR2(30 char) AGENUMBER(3) WIFENAMEVARCHAR2(255 char) 图5-2 数据库表结构图 5.1.3 实体类 package com.rongqq.hibernate3.annotation.entity; import java.math.BigDecimal; import javax.persistence.Column; import javax.persistence.Embedded; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.SequenceGenerator; @Entity(name="H_HUSBAND_") @SequenceGenerator(name="husband_seq_gene", sequenceName="HUSBAND_SEQ", allocationSize=1) public class Husband { private BigDecimal id; private String name; private Wife wife; @Id @Column(precision=4, scale=0) @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="husband_seq_gene") public BigDecimal getId() { return id; } @Column(length=30) public String getName() { return name; 24 } @Embedded public Wife getWife() { return wife; } public void setId(BigDecimal id) { this.id = id; } public void setName(String name) { this.name = name; } public void setWife(Wife wife) { this.wife = wife; } } package com.rongqq.hibernate3.annotation.entity; import java.math.BigDecimal; import javax.persistence.Column; public class Wife { private String name; private BigDecimal age; @Column(name="wifeName") public String getName() { return name; } public void setName(String name) { this.name = name; } @Column(precision=3) public BigDecimal getAge() { return age; } public void setAge(BigDecimal age) { this.age = age; } } 5.2 XML方式 5.2.1 类图 25 图5-3 类关联关系图 5.2.2 数据库表结构 H_HUSBAND_XML IDNUMBER(4) NAMEVARCHAR2(30 char) WIFENAMEVARCHAR2(255 char) AGENUMBER(3,2) 图5-4 数据库表结构图 5.2.3 实体类 package com.rongqq.hibernate3.xml.entity; import java.math.BigDecimal; public class XML_Husband { private BigDecimal id; private String name; private XML_Wife wife; public BigDecimal getId() { return id; } public String getName() { return name; } public XML_Wife getWife() { return wife; } public void setId(BigDecimal id) { this.id = id; } public void setName(String name) { this.name = name; } public void setWife(XML_Wife wife) { this.wife = wife; } } package com.rongqq.hibernate3.xml.entity; 26 import java.math.BigDecimal; public class XML_Wife { private String name; private BigDecimal age; public String getName() { return name; } public void setName(String name) { this.name = name; } public BigDecimal getAge() { return age; } public void setAge(BigDecimal age) { this.age = age; } } 5.2.4 对象映射文件 wife "age""AGE""3" 27 六、多对一单向关联 6.1 Annotation方式 6.1.1 类图,说明:一个人具备多套房子的所有权,这么多套房子属于这个人, 图6-1 类关联关系图 6.1.2 数据库表结构 H_HOUSE_ IDNUMBER(20) POSITIONVARCHAR2(255 char) PERSON_IDNUMBER(21) FK5822AD3634FDD6C8 H_PERSON_ IDNUMBER(21) NAMEVARCHAR2(255 char) 图6-2 数据库表结构图 6.1.3 实体类 package com.rongqq.hibernate3.annotation.entity; import java.math.BigDecimal; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.SequenceGenerator; @Entity(name="H_HOUSE_") @SequenceGenerator(name="HouseGene", sequenceName="H_HOUSE_SEQ", allocationSize=1) public class House { 28 private BigDecimal id; private String position; private Person person;//House(多)-Person(一),一个人可以有多个房子,而这些房子属于这一个人 @Id @Column(precision=20) SEQUENCE, generator="HouseGene") @GeneratedValue(strategy=GenerationType. public BigDecimal getId() { return id; } public void setId(BigDecimal id) { this.id = id; } public String getPosition() { return position; } public void setPosition(String position) { this.position = position; } @ManyToOne //@JoinColumn(name=””)//可以指定外键名称 public Person getPerson() { return person; } public void setPerson(Person person) { this.person = person; } } package com.rongqq.hibernate3.annotation.entity; import java.math.BigDecimal; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.SequenceGenerator; @Entity(name="H_PERSON_") @SequenceGenerator(name="PersonGene", sequenceName="H_PERSON_SEQ", allocationSize=1) public class Person { private BigDecimal Id; private String name; @Id @Column(precision=21) 29 , generator="PersonGene") @GeneratedValue(strategy=GenerationType.SEQUENCE public BigDecimal getId() { return Id; } public void setId(BigDecimal id) { Id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 6.2 XML方式 6.2.1 类图,说明:一个人具备多套房子的所有权,这么多套房子属于这个人, 图6-3 类关联关系图 6.2.2 数据库表结构 H_HOUSE_XML IDNUMBER(20)POSITIONVARCHAR2(255 char)PERSON_IDNUMBER(21) FK6B5C130197DD31F4 H_PERSON_XML IDNUMBER(21)NAMEVARCHAR2(255 char) 图6-4 数据库表结构图 6.2.3 实体类 package com.rongqq.hibernate3.xml.entity; import java.math.BigDecimal; public class XML_House { 30 private BigDecimal id; private String position; private XML_Person person; public BigDecimal getId() { return id; } public void setId(BigDecimal id) { this.id = id; } public String getPosition() { return position; } public void setPosition(String position) { this.position = position; } public XML_Person getPerson() { return person; } public void setPerson(XML_Person person) { this.person = person; } } package com.rongqq.hibernate3.xml.entity; import java.math.BigDecimal; public class XML_Person { private BigDecimal Id; private String name; public BigDecimal getId() { return Id; } public void setId(BigDecimal id) { Id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 6.2.4 对象映射文件 H_HOUSE_XML_SEQ > "person" "PERSON_ID""21""0" H_XML_PERSON_SEQ 注:,表,原则,在多的一方加外键 七、一对多单向关联 7.1 Annotation方式 7.1.1 类图,说明:一个人具备多套房子的所有权,这么多套房子属于这个人, 32 图7-1 类关联关系图 7.1.2 数据库表结构 H_HOUSE_ IDNUMBER(20) POSITIONVARCHAR2(255 char) HOUSE_IDNUMBER(21) FK5822AD36F39C131D H_PERSON_ IDNUMBER(21) NAMEVARCHAR2(255 char) 图7-2 数据库表结构图 7.1.3 实体类 package com.rongqq.hibernate3.annotation.entity; import java.math.BigDecimal; import java.util.HashSet; import java.util.Set; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.OneToMany; import javax.persistence.SequenceGenerator; @Entity(name="H_PERSON_") @SequenceGenerator(name="PersonGene", sequenceName="H_PERSON_SEQ", allocationSize=1) public class Person { private BigDecimal Id; private String name; private Set houses = new HashSet(); @Id @Column(precision=21) 33 , generator="PersonGene") @GeneratedValue(strategy=GenerationType.SEQUENCE public BigDecimal getId() { return Id; } public void setId(BigDecimal id) { Id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @OneToMany @JoinColumn(name="HOUSE_ID")//不加会生成由一张中间表连接的共三张表 public Set getHouses() { return houses; } public void setHouses(Set houses) { this.houses = houses; } } package com.rongqq.hibernate3.annotation.entity; import java.math.BigDecimal; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.SequenceGenerator; @Entity(name="H_HOUSE_") @SequenceGenerator(name="HouseGene", sequenceName="H_HOUSE_SEQ", allocationSize=1) public class House { private BigDecimal id; private String position; @Id @Column(precision=20) @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="HouseGene") public BigDecimal getId() { return id; } public void setId(BigDecimal id) { this.id = id; 34 } public String getPosition() { return position; } public void setPosition(String position) { this.position = position; } } 7.2 XML方式 7.2.1 类图,说明:一个人具备多套房子的所有权,这么多套房子属于这个人, 图7-3 类关联关系图 7.2.2 数据库表结构 H_PERSON_XML IDNUMBER(21) NAMEVARCHAR2(255 char) FK6B5C130197DD31F4 H_HOUSE_XML IDNUMBER(20) POSITIONVARCHAR2(255 char) PERSON_IDNUMBER(21,2) 图7-4 数据库表结构图 7.2.3 实体类 package com.rongqq.hibernate3.xml.entity; import java.math.BigDecimal; import java.util.HashSet; import java.util.Set; public class XML_Person { private BigDecimal Id; private String name; private Set houses = new HashSet(); 35 public BigDecimal getId() { return Id; } public void setId(BigDecimal id) { Id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Set getHouses() { return houses; } public void setHouses(Set houses) { this.houses = houses; } } package com.rongqq.hibernate3.xml.entity; import java.math.BigDecimal; public class XML_House { private BigDecimal id; private String position; public BigDecimal getId() { return id; } public void setId(BigDecimal id) { this.id = id; } public String getPosition() { return position; } public void setPosition(String position) { this.position = position; } } 7.2.4 对象映射文件 36 table= dynamic-update=> "id""big_decimal" H_XML_PERSON_SEQ "PERSON_ID""21" "XML_House" H_HOUSE_XML_SEQ 八、一对多、多对一双向关联 8.1 Annotation方式 8.1.1 类图 37 图8-1 类关联关系图 8.1.2 数据库表结构 H_PERSON_ IDNUMBER(21) NAMEVARCHAR2(255 char) FK5822AD3634FDD6C8 H_HOUSE_ IDNUMBER(20) POSITIONVARCHAR2(255 char) PERSON_IDNUMBER(21) 图8-2 数据库表结构图 8.1.3 实体类 package com.rongqq.hibernate3.annotation.entity; import java.math.BigDecimal; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.ManyToOne; import javax.persistence.SequenceGenerator; @Entity(name="H_HOUSE_") @SequenceGenerator(name="HouseGene", sequenceName="H_HOUSE_SEQ", allocationSize=1) public class House { private BigDecimal id; private String position; private Person person; @Id @Column(precision=20) @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="HouseGene") public BigDecimal getId() { return id; } 38 public void setId(BigDecimal id) { this.id = id; } public String getPosition() { return position; } public void setPosition(String position) { this.position = position; } @ManyToOne//如果需要指定外键字段使用@JoinColumn(name="PERSON_ID") public Person getPerson() { return person; } public void setPerson(Person person) { this.person = person; } } package com.rongqq.hibernate3.annotation.entity; import java.math.BigDecimal; import java.util.HashSet; import java.util.Set; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.SequenceGenerator; @Entity(name="H_PERSON_") @SequenceGenerator(name="PersonGene", sequenceName="H_PERSON_SEQ", allocationSize=1) public class Person { private BigDecimal Id; private String name; private Set houses = new HashSet(); @Id @Column(precision=21) SEQUENCE, generator="PersonGene") @GeneratedValue(strategy=GenerationType. public BigDecimal getId() { return Id; } public void setId(BigDecimal id) { Id = id; } 39 public String getName() { return name; } public void setName(String name) { this.name = name; } @OneToMany(mappedBy="person")//参考了对方的属性名 public Set getHouses() { return houses; } public void setHouses(Set houses) { this.houses = houses; } } 8.2 XML方式 8.2.1 类图 图8-3 类关联关系图 8.2.2 数据库表结构 H_PERSON_XML IDNUMBER(21) NAMEVARCHAR2(255 char) FK6B5C130197DD31F4 H_HOUSE_XML IDNUMBER(20) POSITIONVARCHAR2(255 char) PERSON_IDNUMBER(19,2) 图8-4 数据库表结构图 8.2.3 实体类 package com.rongqq.hibernate3.xml.entity; import java.math.BigDecimal; 40 public class XML_House { private BigDecimal id; private String position; private XML_Person person; public BigDecimal getId() { return id; } public void setId(BigDecimal id) { this.id = id; } public String getPosition() { return position; } public void setPosition(String position) { this.position = position; } public XML_Person getPerson() { return person; } public void setPerson(XML_Person person) { this.person = person; } } package com.rongqq.hibernate3.xml.entity; import java.math.BigDecimal; import java.util.HashSet; import java.util.Set; public class XML_Person { private BigDecimal Id; private String name; private Set houses = new HashSet(); public BigDecimal getId() { return Id; } public void setId(BigDecimal id) { Id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Set getHouses() { 41 return houses; } public void setHouses(Set houses) { this.houses = houses; } } 8.2.4 对象映射文件 "com.rongqq.hibernate3.xml.entity" "XML_Person""H_PERSON_XML""true" "id""big_decimal" H_XML_PERSON_SEQ --> > H_HOUSE_XML_SEQ 42 column=/> 九、多对多单向关联 9.1 Annotation方式 9.1.1 类图 图9-1 类关联关系图 9.1.2 数据库表结构 H_TEACHER_H_STUDENT_ IDNUMBER(19,2)IDNUMBER(19,2)NAMEVARCHAR2(255 char)NAMEVARCHAR2(255 char) FK42312B1CDC4D30CFK42312B1BD29886C H_T_S TEACHER_IDNUMBER(19,2)STUDENT_IDNUMBER(19,2) 图9-2 数据库表结构图 9.1.3 实体类 package com.rongqq.hibernate3.annotation.entity; import java.math.BigDecimal; import java.util.HashSet; import java.util.Set; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; 43 import javax.persistence.JoinTable; import javax.persistence.ManyToMany; import javax.persistence.SequenceGenerator; import javax.persistence.Table; @Entity(name="T")//name是用来在HQL语句中应用的本类的名字 @Table(name="H_TEACHER_")//数据库中当前类对应的表名 @SequenceGenerator(name="Teacher_Gene", sequenceName="H_TEACHER_SEQ", allocationSize=1) public class Teacher { private BigDecimal id; private String name; private Set students = new HashSet(); @Id , generator="Teacher_Gene") SEQUENCE @GeneratedValue(strategy=GenerationType. public BigDecimal getId() { return id; } public void setId(BigDecimal id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @ManyToMany @JoinTable( name="H_T_S",//指明中间表的名字 joinColumns={@JoinColumn(name="TEACHER_ID", referencedColumnName="ID")}, //指明中间表参考当前类对应数据库表中的字段ID的外键名为TEACHER_ID inverseJoinColumns={@JoinColumn(name="STUDENT_ID",referencedColumnName= "ID")} //指明中间表参考另外一张表中的字段ID的外键名为STUDENT_ID ) public Set getStudents() { return students; } public void setStudents(Set students) { this.students = students; } } 44 package com.rongqq.hibernate3.annotation.entity; import java.math.BigDecimal; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.SequenceGenerator; import javax.persistence.Table; @Entity(name="S") @Table(name="H_STUDENT_") @SequenceGenerator(name="Student_Gene", sequenceName="H_STUDENT_SEQ", allocationSize=1) public class Student { private BigDecimal id; private String name; @Id SEQUENCE, generator="Student_Gene") @GeneratedValue(strategy=GenerationType. public BigDecimal getId() { return id; } public void setId(BigDecimal id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 9.2 XML方式 9.2.1 类图 图8-3 类关联关系图 9.2.2 数据库表结构 45 H_STUDENT_XMLH_TEACHER_XMLIDNUMBER(21)IDNUMBER(20)NAMEVARCHAR2(255 char)NAMEVARCHAR2(255 char) FKF6B3D5E9F1759EF0FKF6B3D5E9C6D0DD60 H_XML_T_S TEACHER_IDNUMBER(19,2)SUTDNET_IDNUMBER(19,2) 图8-4 数据库表结构图 9.2.3 实体类 package com.rongqq.hibernate3.xml.entity; import java.math.BigDecimal; import java.util.HashSet; import java.util.Set; public class XML_Teacher { private BigDecimal id; private String name; private Set students = new HashSet(); public BigDecimal getId() { return id; } public void setId(BigDecimal id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Set getStudents() { return students; } public void setStudents(Set students) { this.students = students; } } package com.rongqq.hibernate3.xml.entity; import java.math.BigDecimal; public class XML_Student { private BigDecimal id; private String name; 46 public BigDecimal getId() { return id; } public void setId(BigDecimal id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 9.2.4 对象映射文件 H_TEACHER_XML_SEQ 47 > H_XML_STUDENT_SEQ "sequence" 十、多对多双向关联 10.1 Annotation方式 10.1.1 类图 图10-1 类关联关系图 10.1.2 数据库表结构 H_TEACHER_H_STUDENT_ IDNUMBER(19,2)IDNUMBER(19,2) NAMEVARCHAR2(255 char)NAMEVARCHAR2(255 char) FK42312B1CDC4D30CFK42312B1BD29886C H_T_S TEACHER_IDNUMBER(19,2) STUDENT_IDNUMBER(19,2) 图10-2 数据库表结构图 10.1.3 实体类 package com.rongqq.hibernate3.annotation.entity; import java.math.BigDecimal; import java.util.HashSet; import java.util.Set; import javax.persistence.Entity; import javax.persistence.GeneratedValue; 48 import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.ManyToMany; import javax.persistence.SequenceGenerator; import javax.persistence.Table; @Entity(name="S") @Table(name="H_STUDENT_") @SequenceGenerator(name="Student_Gene", sequenceName="H_STUDENT_SEQ", allocationSize=1) public class Student { private BigDecimal id; private String name; private Set teachers = new HashSet(); @Id , generator="Student_Gene") SEQUENCE @GeneratedValue(strategy=GenerationType. public BigDecimal getId() { return id; } public void setId(BigDecimal id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @ManyToMany(mappedBy="students") public Set getTeachers() { return teachers; } public void setTeachers(Set teachers) { this.teachers = teachers; } } package com.rongqq.hibernate3.annotation.entity; import java.math.BigDecimal; import java.util.HashSet; import java.util.Set; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; 49 import javax.persistence.JoinTable; import javax.persistence.ManyToMany; import javax.persistence.SequenceGenerator; import javax.persistence.Table; @Entity(name="T") @Table(name="H_TEACHER_") @SequenceGenerator(name="Teacher_Gene", sequenceName="H_TEACHER_SEQ", allocationSize=1) public class Teacher { private BigDecimal id; private String name; private Set students = new HashSet(); @Id , generator="Teacher_Gene") SEQUENCE @GeneratedValue(strategy=GenerationType. public BigDecimal getId() { return id; } public void setId(BigDecimal id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @ManyToMany @JoinTable( name="H_T_S",//指明中间表的名字 joinColumns={@JoinColumn(name="TEACHER_ID", referencedColumnName="ID")}, //指明中间表参考当前类对应数据库表中的字段ID的外键名为TEACHER_ID inverseJoinColumns={@JoinColumn(name="STUDENT_ID", referencedColumnName="ID")} //指明中间表参考另外一张表中的字段ID的外键名为STUDENT_ID ) public Set getStudents() { return students; } public void setStudents(Set students) { this.students = students; } } 50 10.2 XML方式 10.2.1 类图 图10-3 类关联关系图 10.2.2 数据库表结构 H_TEACHER_XMLH_STUDENT_XML IDNUMBER(20)IDNUMBER(21) NAMEVARCHAR2(255 char)NAMEVARCHAR2(255 char) FKF6B3D5E9C6D0DD60FKF6B3D5E9B63592C0 H_XML_T_S STUDENT_IDNUMBER(19,2) TEACHER_IDNUMBER(19,2) 图10-4 数据库表结构图 10.2.3 实体类 package com.rongqq.hibernate3.xml.entity; import java.math.BigDecimal; import java.util.HashSet; import java.util.Set; public class XML_Teacher { private BigDecimal id; private String name; private Set students = new HashSet(); public BigDecimal getId() { return id; } public void setId(BigDecimal id) { this.id = id; } public String getName() { return name; 51 } public void setName(String name) { this.name = name; } public Set getStudents() { return students; } public void setStudents(Set students) { this.students = students; } } package com.rongqq.hibernate3.xml.entity; import java.math.BigDecimal; import java.util.HashSet; import java.util.Set; public class XML_Student { private BigDecimal id; private String name; private Set teachers = new HashSet(); public BigDecimal getId() { return id; } public void setId(BigDecimal id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Set getTeachers() { return teachers; } public void setTeachers(Set teachers) { this.teachers = teachers; } } 10.2.4 对象映射文件 52 > "XML_Teacher""H_TEACHER_XML""true" H_TEACHER_XML_SEQ "students""H_XML_T_S" "TEACHER_ID" "XML_Student""STUDENT_ID" H_XML_STUDENT_SEQ "XML_Teacher""TEACHER_ID" 53
/
本文档为【Hibernate_关联关系映射配置】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索