注解:【无连接表的】Hibernate双向1->N关联
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();
}
}
#数据模型

注解:【无连接表的】Hibernate双向1->N关联的更多相关文章
- Hibernate双向多对多关联
一.配置双向多对多关联 以Project类(项目)和Emp类(员工)为例: 1.创建Project类,并需要定义集合类型的Emp属性 public class Project { //编号 priva ...
- 注解:【无连接表的】Hibernate单向1->N关联
Person与Address关联:单向1->N,[无连接表的] (性能较低,不推荐使用!) Person.java package org.crazyit.app.domain; import ...
- 注解:【无连接表的】Hibernate单向N->1关联
Person与Address关联:单向N->1,[无连接表的] Person.java package org.crazyit.app.domain; import javax.persiste ...
- hibernate一对一双向外键关联
一对一双向外键关联:双方都持有对方的外键关联关系. 主控方和一对一单向外键关联的情况是一样的,主要的差异表现为,被空方需要添加: @OneToOne(mappedBy="card" ...
- Java进阶知识07 Hibernate一对一双向外键关联(Annotation+XML实现)
1.Annotation 注解版 1.1.创建Husband类和Wife类 package com.shore.model; import javax.persistence.Entity; impo ...
- hibernate双向ManyToMany映射
工作需要一个双向多对多映射,照着李刚的书做了映射,碰到了一些问题,现就问题及解决方案进行总结归纳. 1.首先奉上最初代码 Person5.java @Entity @Table(name = &quo ...
- Angular11 模板表单、响应式表单(自定义验证器)、HTTP、表单元素双向绑定
1 模板表单 模型通过指令隐式创建 技巧01:需要在模块级别引入 FormsModule ,通常在共享模块中引入再导出,然后在需要用到 FormsModule 的模块中导入共享模块就可以啦 impor ...
- Hibernate 配置双向多对多关联
本文解决问题:Hibernate 中配置项目(Project) 员工(Employee) 双向多对多关联 方案一:直接配置双向多对多 方案二:配置第三个关联类(xml) 将多对多查分开来(形成 ...
- java:Hibernate框架2(关联映射(多对一,一对多,一对多双向,一对一主键,一对一唯一外键,多对多双向))
hibernate.cfg.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE h ...
随机推荐
- Ubuntu 14.04.4官方默认更新源sources.list
Ubuntu 14.04.4官方默认更新源sources.list # deb cdrom:[Ubuntu LTS _Trusty Tahr_ - Release amd64 (20160217.1) ...
- NGUI 滑动特效之中间放大滚动
效果图如下: 其实很简单,在NGUI原有的滑动组件的基础上处理一下比例系数就好,每个块的位置是固定的,移动的是Panel. 所以呢用Panel的位置与块的位置做差在比几个块不就成了比例系数了么..自然 ...
- TAC Alpha版本 冲冲冲!!!
第1天 第2天 第3天 第4天 第5天 第6天 第7天 第8天 第9天 第10天 测试随笔 冲刺总结
- Windows操作系统待整理
12. 2001年10月25日Windows XP发布,Windows XP是基于Windows 2000代码的产品,同时拥有一个新的用户图形界面(叫做月神Luna),它包括了一些细微的修改.集成了防 ...
- webpack解惑:require的五种用法 (转)
我之前在 <前端搭环境之从入门到放弃>这篇文章中吐槽过,webpack中可以写commonjs格式的require同步语法,可以写AMD格式的require回调语法,还有一个require ...
- SourceTree推送时,增加额外的远程仓库,不用每次都自定义粘贴复制网络
一.命令行添加 二.软件界面可以查看到结果 更新,以上是代码添加了远程仓库,最近,找到了不用代码,直接在文件夹里写地址来添加的方式.直接上图了.
- thinkphp一句话疑难解决笔记 2
php中的_ _call()方法? 它是php5后为对象 类 新增的一个自动方法. 它会监视类的其他方法的调用, 当调用类的不存在的方法时, 会自动调用类的__call方法. tp的 "命名 ...
- [Machine Learning & Algorithm] 决策树与迭代决策树(GBDT)
谈完数据结构中的树(详情见参照之前博文<数据结构中各种树>),我们来谈一谈机器学习算法中的各种树形算法,包括ID3.C4.5.CART以及基于集成思想的树模型Random Forest和G ...
- Linux/CentOS优化配置 汇总
[强烈要求做的]CentOS启用sudo,禁用root远程登录 Linux命令行修改IP.网关.DNS.主机名 的方法 Linux开机直接进入“命令行”模式 更改CentOS 6.x yum源为国内1 ...
- 第七届山东省ACM省赛
激动人心的省赛终于结束了…平静下来再回头看真的感觉一波三折…先是赛前毫无预兆的查出突发性耳聋…伴随而来的就是左耳听力下降.轻微耳鸣.极个别情况下的头晕…不过这都还好,毕竟药物可以恢复…热身赛只过了一道 ...