配置自定义自动增列,其实涉及到另外的一张表,即自动增长列表key_generator,同时需要在key_generator表中建立一列userId。给个默认值1。这样在做数据插入的时候,自增列就会变化(格式是uuid**),主要的格式由参数prefix指定
配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!--catalog和库名一致-->
<class name="com.my.pojo.GeneratorTb" table="tbl_gentest" schema="dbo"
>
<id name="userId" type="java.lang.String" column="userId">
<generator class="com.my.mygenerator.MyGenerator">
<param name="table">key_generator</param>
<param name="column">userId</param>
<param name="prefix">uuid</param>
</generator>
</id>
<property name="name" type="java.lang.String">
<column name="user_name" length="50"></column>
</property>
</class>
</hibernate-mapping>
映射实体类
import java.io.Serializable;
public class GeneratorTb implements Serializable{
private String userId;
private String name;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
自动增长列
import java.util.Properties;
import java.io.Serializable;
import org.hibernate.dialect.Dialect;
import org.hibernate.HibernateException;
import org.hibernate.engine.SessionImplementor;
import org.hibernate.id.*;
import org.hibernate.type.*;
import org.hibernate.util.PropertiesHelper;
public class MyGenerator extends TableGenerator{
public static final String PREFIX = "prefix";
private String prefix;
public void configure(Type type, Properties params, Dialect d) {
super.configure(type, params, d);
prefix=PropertiesHelper.getString(PREFIX,params,"");
}
public synchronized Serializable generate(SessionImplementor session, Object obj) throws HibernateException {
int val = ( (Integer) super.generate(session, obj) ).intValue();
return prefix+val;
}
}