Hibernate 1-1(有连接表的的单向1-1关联)

原创 2016年08月29日 23:49:51
package com.javaee.book.hibernate;

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.JoinTable;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;

@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)
    /**
     * @JoinTable 8个属性
     *   name 指定连接表的名字
     *   catalog 指定连接表所在的数据库,默认是hibernate.cfg.xml配置的数据库
     *   uniqueConstraints 为连接表增加唯一约束
     *   inverseJoinColumns 可接收多个@JoinColumn,配置连接表中外键列的列信息(外键列参照当前实体的关联实体对应的主键列)
     *   joinColumns 可接收多个@JoinColumn,配置连接表中外键列的列信息(外键列参照当前实体对应的主键列)
     *   indexes 为当前表创建多个索引值
     *   
     */
    @JoinTable(name = "person_address",
//   指定连接表中person_id外键列,参照当前实体类对应的主键列
    joinColumns = @JoinColumn(name = "person_id", referencedColumnName = "person_id", unique = true),
     inverseJoinColumns=@JoinColumn(name="address_id",referencedColumnName="address_id",unique=true))
//  @JoinColumn(name="address_id",referencedColumnName="address_id",unique=true)
    private Address 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 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 com.javaee.book.hibernate;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@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() {
        // Hibernate调用
    }

    public Address(String detail) {
        this.addressDetail = detail;
    }

    public int getAddressId() {
        return addressId;
    }

    public void setAddressId(int addressId) {
        this.addressId = addressId;
    }

    public String getAddressDetail() {
        return addressDetail;
    }

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

}
public class TestDemo {
    public static void main(String[] args) {
        testOneToOne1();
    }


    public static void testOneToOne1(){

        //加载hibernate.cfg.cml文件
        StandardServiceRegistry registry = new StandardServiceRegistryBuilder()
                .configure().build();
        SessionFactory sessionFactory = new MetadataSources(registry)
                .buildMetadata().buildSessionFactory();
        // 获取Session
        Session session = sessionFactory.openSession();
        // 获取Transaction
        Transaction transaction = session.beginTransaction();

        Person person=new Person();
        person.setName("British Man");
        person.setAge(21);
        Address a1=new Address("NewBalance");
        person.setAddress(a1);
        // 先持久化Address对象(对应为插入主表记录)
        session.persist(a1);
        // 再持久化Person对象(对应为插入从表记录)
        session.save(person);

        transaction.commit();
        session.close();
        sessionFactory.close();

    }
    }

相关文章推荐

Hibernate 1-N单向关联(注解实现)

无连接表的1-N单向关联Person.java(1端)package com.oneToMany;import java.util.HashSet; import java.util.Set;impo...

Hibernate 1-1(注解实现,基于外键列的单向无连接表)

package com.javaee.book.hibernate;import javax.persistence.Column; import javax.persistence.Entity; ...

文章标题 Hibernate 1-N 双相关联

Hibernate 1-N 双相关联 Hibernate 可以通过主控方的实体加载被控方的实体,也可以通过被控方加载主控方的实体 接下来的一个实例将讲解1-n与n-1之间的双向关联; 1 首先配...
  • Souwy
  • Souwy
  • 2016年12月27日 17:54
  • 1429

Hibernate的单向N-1关联(一)

1. 无连接表的N-1关联 对于无连接的N-1关联而言,程序只要在N的一端增加一列外键,让外键记录对象指所属的实体即可,Hibernate可使用@JoinColumn来修饰代表关联实体的属性,@Jo...

Hibernate关联关系之——单向n-1

1 .单向 n-1 关联只需从n的一端可以访问1的一端 2.域模型: 从Order到Customer的多对一单向关联需要在Order类中定义一个Customer属性,而在Customer类中无需定义存...

hibernate关联关系映射(1对1 单向 外键)

注解的方式 Husband.java

hibernate5(9)注解映射[1]多对一单向关联

在实际的项目开发中,我们常常需要建立我们实体类间的复杂关系,比如在一个博客网站中,用户会写文章,则文章与用户的关系就是多对一的映射关系。 现在先看一个配置实例:我们的文章实体类package com...

6.1.1 无连接表的单向N--->1关联

单向N--->1关联,比如在一个办公室里工作的多个人对应一个地址。为了让两个持久化类支持这种关联映射,程序应该在N的一端的持久化类中增加一个属性,该属性引用1的一端的关联实体。 我们先将test库里的...

Hibernate 1+N 问题

1+N问题的描述:举例,多个主题(Topic)属于一个帖子(Category),一个帖子含有多个主题。当只需要查询Topic时不要查询Category时,如果@ManyToOne的属性fetch=Fe...

hibernate 1

第1课 课程内容 1、 HelloWorld a) Xml b) Annotction 2、 Hibernate原理模拟-什么是O/RMapping以及为什么要有O/RMapping 3、 常风的O/...
  • tanyit
  • tanyit
  • 2011年11月18日 10:58
  • 2662
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hibernate 1-1(有连接表的的单向1-1关联)
举报原因:
原因补充:

(最多只允许输入30个字)