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

来源:互联网 发布:苏宁易购和淘宝哪个好 编辑:程序博客网 时间:2024/06/08 07:56
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();    }}

效果图

0 0
原创粉丝点击