如何使用序列表

时间:2013-08-16 12:10:32

标签: java mysql hibernate oracle11g

public String getJobNumber() {
              String DATE_FORMAT = "yyyyMMdd";
              SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
              Calendar calendar = Calendar.getInstance();
              NumberFormat numberFormat = new DecimalFormat("0000000");
              return sdf.format(calendar.getTime()) +
                      numberFormat.format(getId()) + jobNumber;
              }

我需要一个序列表来跟踪包含字段jobNumber的表标题的id。 jobNumber的格式为20130816 * 0000001 * XXXXXX。

我以为我可以在保存时使用id(但尚未保存),以生成jobNumber。

我得到了例外:

 org.hibernate.PropertyAccessException: Exception occurred inside getter of com.test.model.Header.jobNumber

如何使用表格(或其他内容)来跟踪最后一个ID?

程序应该在MySQL和Oracle 11g DB上运行。提前谢谢。

1 个答案:

答案 0 :(得分:0)

使用表格来包含您的计数器。每次需要一个新值时,启动另一个非常短的事务,它将从表中获取计数器的值,递增它,将其保存回表中,然后返回它。然后从此计数器生成您的工作号码并将其保存到您的实体中。

如果您经常生成这样的作业编号,那么您可以使用更好的技术,如hilo算法,或将计数器递增100的技术,并将100个下一个计数器值保存在内存中的线程安全缓存中。 / p>