Hibernate之N-1(注解实现,无连接表)

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

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

@Entity//声明该类是一个Hibernate持久化类
/**
 *@Table有5个属性
 *   name 设置持久化类所映射表的表名
 *   catalog 用于把持久化类放到指定的catalog(数据库),如果没有,则默认在配置文件指定的数据库
 *   uniqueConstraints 为持久化类所映射的表设置唯一约束
 *   indexes 为持久化类所映射的表设置索引
 *   schema 设置将持久化类所映射的表放在指定的scheme中
 */
@Table(name="person_inf")//指明Person对应的数据库表名
public class Person {

    @Id//指定该类的标识属性,映射的表主键列
    /**
     * @Column有十个属性
     *    name 列名(默认和成员变量名字相同)
     *    length 数据最大长度
     *    columnDefinition 指定创建该数据列的SQL语句
     *    insertable 指定该列是否包含在Hibernate生成的insert语句的列中,默认true
     *    nullable 指定该列是否乐为null,默认是true
     *    precision 该列是decimal类型时,该属性指定该列支持的最大有效数字
     *    scale 该列是decimal类型时,该属性指定该列支持的最大小数位数
     *    table 指定该列所属的表名,当需要用多个表来保存一个实体时需要指定该属性
     *    unique 指定该列是否具有唯一约束,默认false
     *    updatable 指定该列是否包含在Hibernate生成的update语句中,默认 true
     */
    @Column(name="person_id")
    @GeneratedValue(strategy=GenerationType.IDENTITY)//指定主键生成策略
    private Integer id;
    private String name;
    private int age;
    /**@ManyToOne四个属性
     *  targetEntity 指定关联的实体类的类名,默认Hibernate通过反射来判断关联类名
     *  cascade 指定Hibernate对关联实体采用怎样的级联策略
     *           CascadeType.ALL Hibernate所有持久化操作都级联到关联实体
     *           CascadeType.MEGE 指定Hibernate将merge操作到关联实体
     *           CascadeType.PERSIST 指定Hibernate将persist操作级联到关联实体
     *           CascadeType.REFRESH 指定Hibernate将refresh操作级联到关联实体
     *           CascadeType.REMOVE 指定Hibernate将remove操作级联到关联实体
     *  fetch 指定抓取关联实体的策略
     *        FetchType.EAGER 默认值 抓取实体时,立即抓取关联实体
     *        FetchType.LAAY 默认值 抓取实体时,延迟抓取关联实体
     *  optional; 指定关联关系是否可选
     */
    @ManyToOne(targetEntity=Address.class)//(N-1关联)
    @JoinColumn(name="address_id",nullable=false)//映射外键列,指定外键列列名是address_id,不允许为空
    @Cascade(CascadeType.ALL)
    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.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
    @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;
    }

}
package com.javaee.book.hibernate;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;


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

        //加载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();
        Address address = new Address("GungZHou TianHe");
        person.setAddress(address);
        person.setName("JeffWu");
        person.setAge(21);
        // 持久化Person对象
        session.persist(person);
        // 创建一个瞬态的Address对象
        Address address2 = new Address("ShangHai HongKou");
        person.setAddress(address2);
        transaction.commit();
        session.close();
        sessionFactory.close();
    }

}

效果图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值