Person与Address关联:双向1->N,【无连接表的】,推荐使用

             #由N端控制关联关系

             #对于指定了mappedBy属性的@OneToMany,@ManyToMany,@OneToOne注解,都不能与

             @JoinColumn或@JoinTable同时修饰带包关联实体的属性。

            #一旦为@OneToMany,@ManyToMany,@OneToOne指定了该属性,则表明当前实体不能控制关联关系。

Person.java

package org.crazyit.app.domain;

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.Table;

@Entity
@Table(name = "Person_inf")
public class Person {

@Column(name = "person_id")
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;

private String name;

private Integer age;

// 双向1->N:1对N关联关系
// 定义该Person实体所有关联的Address
@OneToMany(targetEntity = Address.class, //
mappedBy = "person") // 指定mappedBy属性,表明该person实体不控制关联关系。
private Set<Address> addresses = new HashSet<Address>();

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Set<Address> getAddresses() {
return addresses;
}

public void setAddresses(Set<Address> addresses) {
this.addresses = addresses;
}

public Integer getAge() {
return age;
}

public void setAge(Integer age) {
this.age = age;
}

}

Address.java

package org.crazyit.app.domain;

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.Table;

@Entity
@Table(name = "Address_inf")
public class Address {

@Id
@Column(name = "address_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;

// 定义该Address实体关联的personshiti
@ManyToOne(targetEntity = Person.class)
// 定义名为person_id的外键列,该外键列引用person_inf表的person_id列
@JoinColumn(name = "person_id", //
referencedColumnName = "person_id", //
nullable = false)
private Person person;

// 地址详细
private String addressDetail;

// 无参构造方法
public Address() {
}

// 初始化全部成员变量
public Address(String addressDetail) {
this.addressDetail = addressDetail;
}

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getAddressDetail() {
return addressDetail;
}

public void setAddressDetail(String addressDetail) {
this.addressDetail = addressDetail;
}

public Person getPerson() {
return person;
}

public void setPerson(Person person) {
this.person = person;
}

}

//运行

package org.crazyit.app.service;

import org.crazyit.app.domain.Address;
import org.crazyit.app.domain.Person;
import org.crazyit.app.utils.HibernateSessionFactory;
import org.hibernate.Session;

public class Start {

/**
* (无连接表的)双向1->N。 由N端控制关联关系
*
* @param args
*/
public static void main(String[] args) {

Session session = HibernateSessionFactory.currentSession();
session.beginTransaction();
// 创建person对象
Person person = new Person();
person.setAge(20);
person.setName("双向1->N");
// 持久化person对象(对应于主表插入)
session.persist(person);

// 创建Address对象
Address address = new Address("中国上海");
// 先设置person和address之间的关联关系
address.setPerson(person);
// 再持久化address对象(对应于从表插入)
session.persist(address);

// 再创建Address对象
Address address2 = new Address("中国上海");
// 先设置person和address之间的关联关系
address2.setPerson(person);
// 再持久化address对象(对应于从表插入)
session.persist(address2);

session.getTransaction().commit();
HibernateSessionFactory.closeSession();
}
}

#数据模型

最新文章

  1. javascript类型注意事项
  2. 图解Android触摸事件分发
  3. JMeter源码集成到Eclipse
  4. apache日志文件太大的问题
  5. linux:指令与档案的搜索
  6. ASP.NET常用代码汇总
  7. C++ Primer 学习笔记_95_用于大型程序的工具 --多重继承与虚继承
  8. CentOS 开启GD库
  9. iOS9的那些坑 — — WeiboSDK registerApp启动就崩溃
  10. Linux 系统命令及其使用详解(大全)
  11. Bootstrap中的 Typeahead 组件
  12. URL,URLConnection,HttPURLConnection的使用
  13. Derby的下载安装和使用,(和JAVA中使用Derby)
  14. Windows 8实例教程系列 - 理解应用框架
  15. Codeforces 437E The Child and Polygon(间隔DP)
  16. PHP设计模式——备忘录模式
  17. android网络编程之HttpUrlConnection的讲解--GET请求
  18. The first day,I get a blogs!!
  19. Vue 爬坑之路(十一)—— 基于 Nuxt.js 实现服务端渲染(SSR)
  20. JAVASCRIPT开发HTML5游戏--斗地主(网络对战PART4)

热门文章

  1. 有用的git建议
  2. TAC Beta版本 冲冲冲!!!
  3. EXPLAINING WHAT ACTION AND FUNC ARE
  4. 深入理解Java中的final关键字
  5. JAX-WS服务端及客户端
  6. Development of large-scale site performance optimization method from LiveJournal background
  7. UI第九节——UIStepper
  8. iOS开发——高级篇——iPad开发、iPad开发中的modal
  9. IIs管理服务一直启动失败的原因之一
  10. PHP 打印调试信息