各位大虾好,小弟在这里向你们请教一个关于Hibernate主键自增的问题,情况是这样子的:
该主键在数据库中的类型是char(4),我想让它用这种格式自增0001,0002...0010...9999。
请问有没有什么主键模式可以实现呢?或者有什么比较好的解决方法,请你们帮小弟提供些解决方案。谢谢!
该主键在数据库中的类型是char(4),我想让它用这种格式自增0001,0002...0010...9999。
请问有没有什么主键模式可以实现呢?或者有什么比较好的解决方法,请你们帮小弟提供些解决方案。谢谢!
解决方案 »
- filter的问题 OSIV
- struts2配置文件问题疑难杂症,求高手!!
- Rapae 弱化DAO的一种方法
- 急!求《J2EE应用与BEA WebLogic Server第2版》一书配套的源代码
- 谁有soap.jar,好像官方网站下不下来??多谢!
- 向高手讨教:struts 中打开本地文件对话框
- 我想看到所有的具体的异常都有哪些,应该怎么看,比如:Primary Key Dulpicate Exception...,我在看java的API时,只能看到那几大类异常,
- 高手请进:j2dk+tomcat数据库连接问题
- 关于shiro的session问题
- java
- java操作mysql数据库时报错
- 数据的同步问题求解
那可以写个方法
public String geNumber(){
//先到数据库里面查询最大的一条数据 select max(列) from 表面
//这里假设为 String max;
if(数据库里面没有){
return "0001";
}else{
long s1 = long.paseLong(max);
long s2 += s1;
return 然后根据S2返回的长度来确定前面加几个0;
}
配置成native什么的,让他自增就可以了,或者使用Hibernate Annotation设置成Auto就可以实现id的自增了!
/*序列号表*/
create table order_seq(
seq int
);
insert into order_seq values(0);然后创建一个类继承 TableGenerator 代码如下 注意导包
import org.hibernate.id.TableGenerator; 以前搞了半天才发现包错了。package com.accp.hibdemo.id.gener;import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;import org.hibernate.HibernateException;
import org.hibernate.engine.SessionImplementor;
import org.hibernate.id.TableGenerator;public class MyIdGenerator extends TableGenerator{ @Override
public synchronized Serializable generate(SessionImplementor session,
Object object) throws HibernateException {
//取到序列号
Integer seq = (Integer)super.generate(session, object);
//组合成想要的格式
Date now = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String result = sdf.format(now);
if(seq<10){
result += "000"+seq;
}else if(seq < 100){
result += "00"+seq;
}else if(seq < 1000){
result += "0"+seq;
}else{
result += seq;
}
return result;
}
}然后配置hibernate 注意我省略了一张User表,有id,name,pwd字段<class name="com.accp.hibdemo.id.entity.Userinfo05" table="userinfo05" catalog="hib_02">
<id name="id" type="java.lang.String">
<column name="id" length="12" />
<!-- 自定义主键生成 -->
<generator class="com.accp.hibdemo.id.gener.MyIdGenerator">
<param name="table">order_seq</param>
<param name="column">seq</param>
</generator>
</id>
<property name="name" type="java.lang.String">
<column name="name" length="30" not-null="true" unique="true" />
</property>
<property name="pwd" type="java.lang.String">
<column name="pwd" length="30" not-null="true" />
</property>
</class>
你不可能直接在数据库中直接操作,所以你可以设置成普通的自增长,
到时候在界面上取的时候Format即可,如果非要是这种数字格式,
那就在存入的时候就进行格式化。