hibernate学习(设计一对一 关系 映射)

//主表
package org.crazy.app.domain;
import javax.persistence.*;
@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;
    @OneToOne(targetEntity=Address.class,mappedBy="person")
    private Address address;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public Address getAddress() {
        return address;
    }
    public void setAddress(Address address) {
        this.address = address;
    }
}

//-----------------------------------
package org.crazy.app.domain;

import javax.persistence.*;

@Entity
@Table(name="address_inf")
public class Address {
    @Id
    @Column(name="address_id")
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Integer addressId;
    private String addressDetail;
    @OneToOne(targetEntity=Person.class)
    @JoinColumn(name="person_id", referencedColumnName="person_id",unique=true)
    private Person person;
    public Integer getAddressId() {
        return addressId;
    }
    public void setAddressId(Integer addressId) {
        this.addressId = addressId;
    }

    public Address(String addressDetail) {
        this.addressDetail = addressDetail;
    }
    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;
    }

}
    public static void main(String[] args) {
        testCascase();
    }
    public static void testCascase(){
        Session session=HibernateUtil.currentSession();
        Transaction tx=session.beginTransaction();
        Person p=new Person();
        p.setName("潘庆强");
        Address a=new Address("宜山路333号");
        p.setAddress(a);a.setPerson(p);
        session.save(p);
        session.save(a);
        tx.commit();
        HibernateUtil.closeSession();
    }

时间: 2024-10-22 00:33:19

hibernate学习(设计一对一 关系 映射)的相关文章

Hibernate One-to-One Mappings 一对一关系映射

Hibernate One-to-One Mappings 一对一关系映射 关键:一对一关系映射和多对一关系映射很像,只是unique 属性值为 true 例子:一个员工只能有一个地址. Hibernate框架的使用步骤: 1.创建Hibernate的配置文件(hibernate.cfg.xml) 2.创建持久化类,即其实例需要保存到数据库中的类(Employee.java) 3.创建对象-关系映射文件(Employee.hbm.xml) 4.通过Hibernate API编写访问数据库的代码

hibernate学习四(关系映射一对一)

一.关系映射简介 在数据库中,表与表的关系,仅有外键.但使用hibernate后,为面向对象的编程,对象与对象的关系多样化:如 一对一,一对多,多对多,并具有单向和双向之分. 开始练习前,复制上一次项目,并更名为 二.一对一单向外键关联 例如:一个老师只教一个学生,一个学生只能被一个老师教 关系图如: 修改teahcer.java和student.java类(为了简单起见吧Student也更改为使用Annotation的形式) 1 package com.model; 2 3 import ja

Hibernate学习笔记_关系映射

    一对一关联     一,     一对一单向外键关联 a)    Annotation: 在被约束表字段的get方法上加@0ne20ne @JoinColumn //Husband .java @Entity public class Husband { private int id; private String name; private Wife wife; @Id @GeneratedValue public int getId() { return id; } public S

Hibernate学习笔记_关系映射_其他

集合映射(不太重要) 1         Set 2        List (与Set差不多 多个@OrderBy) a) @OrderBy     排序 private List<User> users = new ArrayList<User>(); @OneToMany(mappedBy="group", cascade={CascadeType.ALL} ) @OrderBy("name ASC") public List<U

Hibernate学习笔记_关系映射_树状结构练习

1         树状结构的设计(至关重要) a) 在同—个类中使用One2Many和Many20ne @Entity public class Org { private int id; private String name; private Set<Org> children=new HashSet<Org>(); private Org parent; @Id @GeneratedValue public int getId() { return id; } public

Hibernate多表关系配置——一对一关系映射

两个对象之间是一对一的关系,如Person-IdCard 有两种策略可以实现一对一的关联映射 主键关联:即让两个对象具有相同的主键值,以表明它们之间的一一对应的关系:数据库表不会有额外的字段来维护它们之间的关系,仅通过表的主键来关联 唯一外键关联 外键关联,本来是用于多对一的配置,但是如果加上唯一的限制之后,也可以用来表示一对一关联关系: 1.实体对象 1.1 Person实体对象 package demo.entity; /** * 人实体 * @author Don * @date:日期:2

Hibernate学习2之继承映射与C3P0连接池

一.继承映射的需要 关系数据库的表之间不存在继承关系, 但为了将面向对象中的继承关系映射到关系数据库中, 可以使用以下三种继承映射策略: -每个继承层次一张表 -每个具体类一张表 -每个类一张表. 二.对比 --每个继承层次一张表: (优点)最简单.执行效率最高(因为无需进行任何关联操作) (缺点)存在冗余字段:在数据表中需要加入额外的区分各个类的字段: 同时不允许为子类成员属性对应的字段定义为not null约束. --每个具体类一张表: (优点)数据结构清晰,且可以对子类成员属性映射的字段定

mybatis中一对一关系映射

一对一关系中普通的配置方式 一.多表连接查询语句: <select id="selectStudentWithAddress" parameterType="int" resultMap="StudentWithAddressResult"> select s.stud_id, s.name, s.email,s.dob,s.phone, a.addr_id, a.street, a.city, a.state, a.zip,a.co

Hibernate学习(五)———— hibernate一对一关系映射详解

一.一对一关系的概述 一对一关系看起来简单,其实也挺复杂的.其中关系就包含了四种,单向双向和主键关联外键关联. 什么意思呢,也就是包含了单向一对一主键关联.双向一对一主键关联,单向一对一外键关联,双向一对一外键关联, 这四种中,单双向就不用在说了把,就是看你业务需求来去设置是否是单双向,而外键关联也很简单,前面的一对多和多对多度是依靠外键关联关系来写的.那主键关联关系是怎么样的呢?其实跟外键关联差不多,唯一的区别就是,让一个类的主键当作外键使用来指向另一个关联类的主键,从而两个类的主键就达到了同