Hibernate属性级别注解:
添加方式:
一是写在属性字段上面
二是写在属性的get访问器的上面
属性注解都有:@Id、@SequenceGenerator、 @GeneratedValue、@Column、@Embedded、@EmbeddedId、@Lob、@Version、@Basic、@Transient
@Id
@Id:必须,定义了映射到数据库表的主键的属性,一个实体类可以有一个或者多个属性被映射为主键,可置于主键属性或者getXxxx()前。
注意:如果有多个属性定义为主键属性,该实体类必须实现serializable接口。
package com.txr.entity;
import javax.persistence.Entity;//JPA注解
import javax.persistence.Id;
import javax.persistence.Table;
//学生实体类
@Entity
@Table(name="t_students",schema="hibernate")
public class Students {
@Id
private int sid; //学号
@Id
private String sname;//姓名
private String gender;//性别
private String major;//专业
private Address address;//地址
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
public Students() {
super();
}
public Students(int sid, String sname, String gender, String major,Address add) {
this.sid = sid;
this.sname = sname;
this.gender = gender;
this.major = major;
this.address=add;
}
@Override
public String toString() {
return "Students [sid=" + sid + ", sname=" + sname + ", gender=" + gender + ", major=" + major + "]";
}
}
@Test
public void TestShemaExport()
{
//创建Hibernate配置对象
Configuration config = new Configuration().configure();
//创建服务注册对象
ServiceRegistry serviceRegistry =new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
//生成sessionFActory
SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);
SchemaExport export =new SchemaExport(config);
export.create(true,true);
}
运行结果:
这是因为有俩个主键而Student类没有进行序列化
将student添加序列化后
@GeneratedValue
@GeneratedValue(strategy=GenerationType,generator="")
可选用于定义主键生成策略
strategy表示主键生成策略,取值有:
1、GenerationType.AUTO:根据底层数据库自动选择(默认)
2、GenerationType.INDENTITY:根据数据库的Identity字段生成
3、GenerationType.SEQUENCE:使用Sequence来决定主键的取值
4、GenerationType.TABLE:使用指定表来决定主键取值,结合@TableGenerator使用
如:
@Id
@TableGenerator(name="tab_cat_gen",allocationSize=1)
@GeneratedValue(Strategy=GenerationType.Table)
Generator - 表示主键生成器的名称,这个属性通常和ORM框架相关,例如:
Hibernate可以指定uuid等主键生成方式
@Column
@Column - 可将属性映射到列,使用该注解来覆盖默认值,@Column描述了数据库表中该字段的详细定义,这对于根据JPA注解生成数据库表结构的工具非常有作用。
常用属性:
name:可选,表示数据库表中该字段的名称,默认情形属性名称一致。
nullable:可选,表示该字段是否允许为Null,默认为true.
unique:可选,表示该字段是否是唯一标识,默认为false.
length;可选,表示该字段的大小,仅对String类型的字段有效,默认值255。(如果是主键不能使用默认值)
insertable:可选,表示在ORM框架执行插入操作时,该字段是否应出现INSERT语句中,默认为true。
updateable:可选,表示在ORM框架执行更新操作时,该字段是否应该出现在UPDATE语句中,默认为true。对
于一经创建就不可以更改的字段,该属性非常有用,如对于birthday字段。
@Embedded
@embedded是注释属性的,表示该属性的类是嵌入类。
注意:同时嵌入类也必须标注@Embeddable注解。
@EmbeddedId
@EmbeddedId使用嵌入式主键类实现复合主键。
注意:嵌入式主键类必须实现Serializable接口、必须有默认的public无参数的构造方法、必须覆盖equals和hashCode方法。
@Transient
可选,表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性,如果一个属性并非数据库表的字段映射,就务必将其表示为@Transient,否则ORM框架默认其注解为@Basic。