Hibernate的单向1-1关联(二)
来源:互联网 发布:关于烟的网络歌曲 编辑:程序博客网 时间:2024/06/01 07:32
1. 基于外键的单向1-1关联
对于基于外键的1-1关联而言,只要先使用@OneToOne注解修饰代表关联关系实体的属性,再使用@JoinColumn映射外键列即可——由于是1-1关联,因此应该为@JoinColumn增加unique=true。下面是Person类的代码。
@Entity@Table(name="person_inf")public class Person{// 标识属性@Id @Column(name="person_id")@GeneratedValue(strategy=GenerationType.IDENTITY)private Integer id;private String name;private int age;// 定义该Person实体关联的Address实体@OneToOne(targetEntity=Address.class)// 映射名为address_id的外键列,参照关联实体对应表的addres_id主键列@JoinColumn(name="address_id", referencedColumnName="address_id" , unique=true)private Address address;// id的setter和getter方法public void setId(Integer id){this.id = id;}public Integer getId(){return this.id;}// name的setter和getter方法public void setName(String name){this.name = name;}public String getName(){return this.name;}// age的setter和getter方法public void setAge(int age){this.age = age;}public int getAge(){return this.age;}// address的setter和getter方法public void setAddress(Address address){this.address = address;}public Address getAddress(){return this.address;}}
下面是Address的类代码。
@Entity@Table(name="address_inf")public class Address{// 标识属性@Id @Column(name="address_id")@GeneratedValue(strategy=GenerationType.IDENTITY)private int addressId;// 定义地址详细信息的成员变量private String addressDetail;// 无参数的构造器public Address(){}// 初始化全部成员变量的构造器public Address(String addressDetail){this.addressDetail = addressDetail;}// addressId的setter和getter方法public void setAddressId(int addressId){this.addressId = addressId;}public int getAddressId(){return this.addressId;}// addressDetail的setter和getter方法public void setAddressDetail(String addressDetail){this.addressDetail = addressDetail;}public String getAddressDetail(){return this.addressDetail;}}我们使用如下的类来保存数据。
public class PersonManager{public static void main(String[] args){PersonManager mgr = new PersonManager();mgr.testPerson();HibernateUtil.sessionFactory.close();}private void testPerson(){Session session = HibernateUtil.currentSession();Transaction tx = session.beginTransaction();// 创建一个Person对象Person p = new Person();// 设置Person的name为owen字符串p.setName("owen");p.setAge(21);// 创建一个瞬态的Address对象Address a = new Address("广州天河");// 通过Person对象建立它自己与Address实体的关联关系p.setAddress(a);// 先持久化Address对象(对应为插入主表记录)session.persist(a);// 再持久化Person对象(对应为插入从表记录)session.save(p);tx.commit();HibernateUtil.closeSession();}}
执行结果图如下:
2. 有连接表的单向1-1关联
有连接表的1-1关联同样需要显示使用@JoinTable映射连接表。除此之外,由于此处的@JoinTable 映射的连接表维护的是1-1关联,因此程序需要为@JoinTable 中joinColumns属性映射的外键增加unique=true,也为inverseJoinColumns属性映射的外键增加unique=true。下面是Person类使用了@OneToOne和@JoinTable修饰代表关联实体的Address类型的属性。
// 标识属性@Id @Column(name="person_id")@GeneratedValue(strategy=GenerationType.IDENTITY)private Integer id;private String name;private int age;// 定义该Person实体关联的Address实体@OneToOne(targetEntity=Address.class)// 显式使用@JoinTable映射连接表@JoinTable(name="person_address", // 指定连接表的表名为person_address// 指定连接表中person_id外键列,参照到当前实体对应表的主键列joinColumns=@JoinColumn(name="person_id", referencedColumnName="person_id", unique=true),// 指定连接表中address_id外键列,参照到当前实体的关联实体对应表的主键列inverseJoinColumns=@JoinColumn(name="address_id", referencedColumnName="address_id", unique=true))
0 0
- Hibernate的单向1-1关联(二)
- Hibernate的单向1-N关联(三)
- Hibernate单向关联1-1
- Hibernate单向关联N-1
- Hibernate单向关联1-N
- Hibernate 单向N-1关联
- Hibernate的关联映射(1)-单向N-1关联
- Hibernate的关联映射(2)-单向1-1关联
- Hibernate的关联映射(3)-单向1-N关联
- 【hibernate】关联映射那些事(二)--单向1-N映射和单向N-N映射
- Hibernate单向1-N关联的简单示例
- Hibernate的单向N-1关联(一)
- 【hibernate】关联映射那些事(一)---单向N-1关联与单向1-1关联
- hibernate 一对多关联 (1)单向关联
- Hibernate的单向关联和双向关联
- hibernate一对一主键关联单向(二)
- Hibernate 1-1(有连接表的的单向1-1关联)
- Hibernate学习随笔-----关系映射(1)单向N-1关联
- HDU1551 Cable master(二分)
- Java 的clone
- 欢迎使用CSDN-markdown编辑器
- JavaScript 开题篇【1】
- ubuntu配置vim为windows下C++编程风格
- Hibernate的单向1-1关联(二)
- AsyncTask
- Java Memory Model基础
- 关于AsyncTask中的cancel方法
- CodeForces 629B Far Relative’s Problem
- Android Design Support Library之CoordinatorLayout和CollapsingToolbarLayout
- 随机过程课中的一个复积分问题
- for循环中变量i始终为length值的分析与解决
- LinearLayout布局的Layout_weight