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-1

基于外键的单向1-1关联一个House关联一个Owner。House类:package com.ydoing.hibernate3; import javax.persistence.CascadeT...
  • csujiangyu
  • csujiangyu
  • 2015年08月05日 15:18
  • 499

Hibernate的单向1-1关联(二)

1. 基于外键的单向1-1关联 对于基于外键的1-1关联而言,只要先使用@OneToOne注解修饰代表关联关系实体的属性,再使用@JoinColumn映射外键列即可——由于是1-1关联,因此应该为@...
  • owen_william
  • owen_william
  • 2016年03月08日 23:36
  • 239

hibernate单向1-1无表连接级联

单向级联1-1无表连接级联映射配置: 1、创建数据库 创建address表 创建person表 2、在hibernate中使用反向工程建立他们对应的实体类 创建address的实体类...
  • personbing
  • personbing
  • 2015年11月27日 17:57
  • 243

Hibernate的关联映射(2)-单向1-1关联

单向1-1关联 1>基于外键的单向1-1关联 Person实体类 package com.anlw.entity; import javax.persistence.Column; import j...
  • an_2016
  • an_2016
  • 2016年07月10日 11:51
  • 272

hibernate基于连接表的一对多单向关联

hibernate基于连接表的一对多单向关联
  • bawcwchen
  • bawcwchen
  • 2015年01月16日 23:06
  • 525

有连接表的双向1-1关联

POJO类: Person.java package com.wang.bean; import java.io.Serializable; public class Person imple...
  • u011975360
  • u011975360
  • 2014年05月06日 09:53
  • 393

Hibernate 一对一连接表单向关联

Hibernate 一对一连接表单向关联         这种情况很少见,但Hibernate同样允许采用连接表关联1-1.有连接表的1-1同样只需要将N...
  • ForeverDWYW
  • ForeverDWYW
  • 2017年02月08日 17:42
  • 532

【hibernate】关联映射那些事(一)---单向N-1关联与单向1-1关联

前一段时间用一个小例子,来作为hibernate关联映射的一个入门。关联映射其实本身没有多难,只不过是关联关系比较多,从而让我们有点摸不到头脑,只要我们静下来心里,从一个更高的角度来看一看关联映射。我...
  • u012331102
  • u012331102
  • 2016年08月28日 16:16
  • 247

Hibernate的双向1-1关联(七)

1. 基于外键的双向1-1关联 对于基于外键的双向1-1关联,外键可以存放在任意一端。只要选择了任意一端来作为增加外键后,该表就变成了主表,另一张表就是从表。主表不应该有关联关系的控制,所以在@On...
  • owen_william
  • owen_william
  • 2016年03月08日 23:55
  • 215

【SSH进阶之路】Hibernate映射——一对一单向关联映射(五)

两个实体对象之间是一对一的关联映射,即一个对象只能与另外唯一的一个对象相对应。例如:一个人(Person)只有一张身份证(IdCard)。...
  • jiuqiyuliang
  • jiuqiyuliang
  • 2014年10月23日 08:15
  • 23564
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hibernate 1-1(有连接表的的单向1-1关联)
举报原因:
原因补充:

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