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
/**
*@Table有5个属性
* name 设置持久化类所映射表的表名
* catalog 用于把持久化类放到指定的catalog(数据库),如果没有,则默认在配置文件指定的数据库
* uniqueConstraints 为持久化类所映射的表设置唯一约束
* indexes 为持久化类所映射的表设置索引
* schema 设置将持久化类所映射的表放在指定的scheme中
*/
@Table(name="person_inf")
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)
@JoinColumn(name="address_id",nullable=false)
@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() {
}
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()
}
}
