java jpa自身关联_JavaEE(14) - JPA关联映射

1. 单向N-1关联映射

2. 单向1-1关联映射

3. 单向1-N关联映射

4. 单向N-N关联映射

5. 双向1-1关联映射

6. 双向1-N关联映射

7. 双向N-N关联映射

1. 单向N-1关联映射(Net Beans创建Java Project, 项目名称:UnidirectionalManyToOne)

Person.java

packageorg.crazyit.model;import javax.persistence.*;

@Entity

@Table(name= "person_table")public classPerson {//标识属性

@Id

@GeneratedValue(strategy=GenerationType.IDENTITY)private intpersonid;privateString name;private intage;//constructor//setter//getter

}

Address.java

packageorg.crazyit.model;import javax.persistence.*;

@Entity

@Table(name= "address_table")public classAddress {

@Id

@GeneratedValue(strategy=GenerationType.IDENTITY)private intaddressid;privateString detail;

@ManyToOne(optional= false, cascade = CascadeType.ALL, fetch = FetchType.LAZY, targetEntity = Person.class)

@JoinColumn(name= "person_id", nullable = false, updatable = false)privatePerson person;publicAddress() {

}publicAddress(String detail) {this.detail =detail;

}//setter//getter

}

persistence.xml(参见12.2)

JpaQs.java(参见12.2)

2. 单向1-1关联映射(Net Beans创建Java Project, 项目名称:UnidirectionalOneToOne)

Person.java

packageorg.crazyit.model;import javax.persistence.*;

@Entity

@Table(name= "person_table")public classPerson {

@Id

@GeneratedValue(strategy=GenerationType.IDENTITY)private intpersonid;privateString name;private intage;//constructor//setter//getter

}

Address.java

packageorg.crazyit.model;import javax.persistence.*;

@Entity

@Table(name= "address_table")public classAddress {//标识属性

@Id

@GeneratedValue(strategy=GenerationType.IDENTITY)private intaddressid;privateString detail;

@OneToOne(optional= false, cascade = CascadeType.ALL, fetch = FetchType.LAZY, targetEntity = Person.class)

@JoinColumn(name= "person_id", nullable = false, updatable = false)privatePerson person;//constructor//setter//getter

}

persistence.xml(参见12.2)

JpaQs.java(参见12.2)

3. 单向1-N关联映射(Net Beans创建Java Project, 项目名称:UnidirectionalOneToMany)

Person.java

packageorg.crazyit.model;import javax.persistence.*;import java.util.*;

@Entity

@Table(name= "person_table")public classPerson {

@Id

@GeneratedValue(strategy=GenerationType.IDENTITY)private intpersonid;privateString name;private intage;//1-N关联关系,使用Set来保存关联实体

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, targetEntity = Address.class)

@JoinColumn(name= "person_id", nullable = false)private Set

addresses = new HashSet
();//constructor//setter//getter

}

Address.java

packageorg.crazyit.model;import javax.persistence.*;

@Entity

@Table(name= "address_table")public classAddress {

@Id

@GeneratedValue(strategy=GenerationType.IDENTITY)private intaddressid;privateString detail;//constructor//setter//getter

}

persistence.xml(参见12.2)

JpaQs.java(参见12.2)

4. 单向N-N关联映射(Net Beans创建Java Project, 项目名称:UnidirectionalManyToMany)

Person.java

packageorg.crazyit.model;import javax.persistence.*;import java.util.*;

@Entity

@Table(name= "person_table")public classPerson {

@Id

@GeneratedValue(strategy=GenerationType.IDENTITY)private intpersonid;privateString name;private intage;//N-N关联关系,使用Set来保存关联实体

@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, targetEntity = Address.class)

@JoinTable(

name= "person_address",

joinColumns= @JoinColumn(name = "person_id"),

inverseJoinColumns= @JoinColumn(name = "address_id")

)private Set

addresses = new HashSet
();//constructor//setter//getter

}

Address.java

packageorg.crazyit.model;import javax.persistence.*;

@Entity

@Table(name= "address_table")public classAddress {

@Id

@GeneratedValue(strategy=GenerationType.IDENTITY)private intaddressid;privateString detail;//constructor//setter//getter

}

persistence.xml(参见12.2)

JpaQs.java

packagelee;importjava.util.List;import javax.persistence.*;import org.crazyit.model.*;public classJpaQs {private static final EntityManagerFactory emf = Persistence.createEntityManagerFactory("qs");public static voidmain(String[] args) {

EntityManager em=emf.createEntityManager();

Person sun= newPerson();

sun.setName("sunwukong");

sun.setAge(500);

Person zhu= newPerson();

zhu.setName("zhubajie");

zhu.setAge(380);

Address road= new Address("The road to Indian.");try{

em.getTransaction().begin();

sun.getAddresses().add(new Address("The water hole to the mountain."));

sun.getAddresses().add(road);

zhu.getAddresses().add(new Address("Gao Laozhuang."));

zhu.getAddresses().add(road);

em.persist(sun);

em.persist(zhu);

em.getTransaction().commit();

}finally{

em.close();

}

}

}

5. 双向1-1关联映射(Net Beans创建Java Project, 项目名称:BidirectionalOneToOne)

Person.java

packageorg.crazyit.model;import javax.persistence.*;

@Entity

@Table(name= "person_table")public classPerson {

@Id

@GeneratedValue(strategy=GenerationType.IDENTITY)private intpersonid;privateString name;private intage;/*设置了mappedBy属性表明Person实体不控制关联关系,*/@OneToOne(mappedBy= "person", cascade = CascadeType.ALL, fetch = FetchType.LAZY, targetEntity = Address.class)privateAddress address;//constructor//setter//getter

}

Address.java

packageorg.crazyit.model;import javax.persistence.*;

@Entity

@Table(name= "address_table")public classAddress {

@Id

@GeneratedValue(strategy=GenerationType.IDENTITY)private intaddressid;privateString detail;

@OneToOne(optional= false, cascade = CascadeType.ALL, fetch = FetchType.LAZY, targetEntity = Person.class)

@JoinColumn(name= "person_id", nullable = false, updatable = false)privatePerson person;//constructor//setter//getter

}

persistence.xml(参见12.2)

JpaQs.java(参见12.2)

packagelee;importjava.util.List;import javax.persistence.*;import org.crazyit.model.*;public classJpaQs {private static final EntityManagerFactory emf = Persistence.createEntityManagerFactory("qs");public static voidmain(String[] args) {

EntityManager em=emf.createEntityManager();

Person person= newPerson();

person.setName("Sun");

person.setAge(500);

Address address= newAddress();

address.setDetail("Hua Guoshan");try{

em.getTransaction().begin();//因为Person实体不控制关联关系,因此让Address实体控制关联关系

address.setPerson(person);

em.persist(address);

em.getTransaction().commit();

}finally{

em.close();

}

}

}

6. 双向1-N关联映射(Net Beans创建Java Project, 项目名称:BidirectionalOneToMany)

Person.java

packageorg.crazyit.model;import javax.persistence.*;import java.util.*;

@Entity

@Table(name= "person_table")public classPerson {

@Id

@GeneratedValue(strategy=GenerationType.IDENTITY)private intpersonid;privateString name;private intage;/*设置了mappedBy属性表明Person实体不控制关联关系,

因此不能增加@JoinTable和@JoinColumn修饰*/@OneToMany(cascade= CascadeType.ALL, mappedBy = "person", targetEntity = Address.class)private Set

addresses = new HashSet
();//constructor//setter//getter

}

Address.java

packageorg.crazyit.model;import javax.persistence.*;

@Entity

@Table(name= "address_table")public classAddress {

@Id

@GeneratedValue(strategy=GenerationType.IDENTITY)private intaddressid;privateString detail;

@ManyToOne(fetch= FetchType.EAGER, targetEntity = Person.class, cascade =CascadeType.ALL)/*使用@JoinColumn来配置外键列的信息*/@JoinColumn(name= "person_id", nullable = true)privatePerson person;//constructor//setter//getter

}

persistence.xml(参见12.2)

JpaQs.java(参见12.2)

7. 双向N-N关联映射(Net Beans创建Java Project, 项目名称:BidirectionalManyToMany)

Person.java

packageorg.crazyit.model;import javax.persistence.*;import java.util.*;

@Entity

@Table(name= "person_table")public classPerson {

@Id

@GeneratedValue(strategy=GenerationType.IDENTITY)private intpersonid;privateString name;private intage;

@ManyToMany(cascade= CascadeType.ALL, fetch = FetchType.LAZY, targetEntity = Address.class)

@JoinTable(

name= "person_address",

joinColumns= @JoinColumn(name = "person_id"),

inverseJoinColumns= @JoinColumn(name = "address_id")

)private Set

addresses = new HashSet
();//constructor//setter//getter

}

Address.java

packageorg.crazyit.model;import javax.persistence.*;import java.util.*;

@Entity

@Table(name= "address_table")public classAddress {

@Id

@GeneratedValue(strategy=GenerationType.IDENTITY)private intaddressid;privateString detail;/*设置了mappedBy属性表明Address实体不控制关联关系,

因此不能增加@JoinTable和@JoinColumn修饰*/@ManyToMany(cascade= CascadeType.ALL, mappedBy = "addresses", fetch = FetchType.LAZY, targetEntity = Person.class)private Set persons = new HashSet();//constructor//setter//getter

}

persistence.xml(参见12.2)

JpaQs.java(参见12.2)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值