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上运行。提前致谢。
最佳答案
使用表格包含您的计数器。每次您需要一个新值时,都要启动另一个非常短的事务,该事务将从表中获取计数器的值,将其递增,然后将其保存回表中并返回。然后从此计数器生成您的工作编号并将其保存到您的实体中。
如果您经常生成此类作业号,则可以使用更好的技术,例如hilo算法,或将计数器增加100并将100个下一个计数器值保留在内存中的线程安全缓存中的技术。