Hibernate Table annotations

在这里回顾下hibernate对table的信息标注和如何自动生成primary key。

可以getxxx()函数前面,用@进行指明。

指明table 名字:          @Table(name="EmployeeInfo")  

指明column 名字:      @Column(name="EmployeeId"

同时可以对column的属性进行设置

值非空:                      @Column(nullable=false

存储日期变量:           @Temporal(TemporalType.DATE)

存储日期和时间变量:@Temporal(TemporalType.TIMESTAMP

代码:

package com.hibernate.chapter1;

import java.util.Calendar;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;
import java.util.Date;
@Entity
@Table(name="EmployeeInfo")  //give table name
public class Employee {
	private int empId;
	private String empName;
	
	private String empPassword;
	private String empEmailAddress;
	private boolean isPermanent;
	private Calendar empJoinDate;
	private Date empLoginTime;
	
	
	@Id //mean primary key
	@Column(name="EmployeeId") //give table column name
	public int getEmpId() {
		return empId;
	}
	public void setEmpId(int empId) {
		this.empId = empId;
	}
	public String getEmpName() {
		return empName;
	}
	public void setEmpName(String empName) {
		this.empName = empName;
	}
	
	@Transient  //do not save it into table as a column
	public String getEmpPassword() {
		return empPassword;
	}
	public void setEmpPassword(String empPassword) {
		this.empPassword = empPassword;
	}
	
	@Column(nullable=false) // this column value can not be null
	public String getEmpEmailAddress() {
		return empEmailAddress;
	}
	public void setEmpEmailAddress(String empEmailAddress) {
		this.empEmailAddress = empEmailAddress;
	}
	
	@Basic //same as default annotation
	public boolean isPermanent() {
		return isPermanent;
	}
	public void setPermanent(boolean isPermanent) {
		this.isPermanent = isPermanent;
	}

	@Temporal(TemporalType.TIMESTAMP) //save Date and Time
	public Date getEmpLoginTime() {
		return empLoginTime;
	}
	public void setEmpLoginTime(Date empLoginTime) {
		this.empLoginTime = empLoginTime;
	}	
	
	@Temporal(TemporalType.DATE)
	public Calendar getEmpJoinDate() {
		return empJoinDate;
	}
	public void setEmpJoinDate(Calendar empJoinDate) {
		this.empJoinDate = empJoinDate;
	}
}

一般情况下,我们的primary key 不是自己指定的,可能需要有规律地生成,那么如何让hibernate自动生成primary key ?

可以通过@GenerateValue这种标注形式。

	@Id //mean primary key
	@GeneratedValue
	@Column(name="EmployeeId") //give table column name
	public int getEmpId() {
		return empId;
	}
但是,仅加这种标注,hibernate仅会帮你生成unique primary key,比如下图:


有时候,我们生成的primary key 希望是连续的,那该怎么做呢?

回忆,我们之前如果写原始代码保证id连续的时候,往往是选择从表中读取最大的id后,然后新的id从这种最大的id号开始增加。

hibernate的做法也是类似的。

我们可以指定auto primary key 的生成策略。(相当于把下个序列的信息存储起来)

	@GeneratedValue(strategy=GenerationType.TABLE, generator="empIdGen")
	@TableGenerator(name="empIdGen", table="emppkTable", pkColumnName="empKey", 
	    pkColumnValue="empvalue", allocationSize=1)
我们用一个叫empkTable的表存储序列信息。pkColumnValue存储了下一个序列的primary key,allocationSize指明了间隔。

设置生成策略以后,我们的primary key就连续了。


这是emppkTable中的信息:



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值