【发布时间】:2014-01-27 10:44:53
【问题描述】:
我是 Hibernate 的新手,在我当前的项目 hibernate 配置文件中,我发现了一些如下代码:
<id name="id" column="ANNOBATCHJOBLOGID">
<generator class="sg.gov.frontier.core.techinfra.persistence.dao.SequenceGeneratorYYYYMMDD">
<param name="sequence">ANNO_BATCH_JOB_LOG_SEQ</param>
</generator>
</id>
只是对param标签感到困惑,有人能告诉我它有什么用吗?还有“ANNO_BATCH_JOB_LOG_SEQ”。非常感谢
SequenceGeneratorYYYYMMDD 类在这里:
public class SequenceGeneratorYYYYMMDD extends SequenceGenerator {
protected Logger logger = Logger.getLogger(SequenceGeneratorYYYYMMDD.class);
public String sequenceName;
public String parameters;
public static final long SEQUENCE_MIN_NUMBER = 1;
public static final long SEQUENCE_MAX_NUMBER = 999999;
public static final long SEQUENCE_INCREMENT_NUMBER = 1;
public static final long SEQUENCE_START_NUMBER = 1;
public SequenceGeneratorYYYYMMDD() {
super();
}
public long getNextSequenceForSequenceName(String strSequenceName)
throws DataAccessObjectException {
final SequenceDao sequenceDao = new SequenceDao();
Long sequence = sequenceDao.getNextKey(strSequenceName);
return sequence;
}
public void configure(Type type, Properties params, Dialect dialect)
throws MappingException {
this.sequenceName = getString(SEQUENCE, params, "hibernate_sequence");
this.parameters = params.getProperty(PARAMETERS);
String schemaName = params.getProperty(SCHEMA);
String catalogName = params.getProperty(CATALOG);
if (sequenceName.indexOf('.') < 0) {
sequenceName = Table.qualify(catalogName, schemaName, sequenceName);
}
}
public String getString(String property, Properties properties,
String defaultValue) {
String propValue = properties.getProperty(property);
return propValue == null ? defaultValue : propValue;
}
public Serializable generate(SessionImplementor session, Object obj)
throws HibernateException {
String result = DateUtil.convertDateToDateString(new DateTime(),
"yyMMddHH");
try {
result = result
+ StringUtil
.leftPad(
String.valueOf(getNextSequenceForSequenceName(sequenceName)),
'0', 8);
} catch (DataAccessObjectException e) {
throw new HibernateException(e.getMessage(), e.getCause());
}
logger.debug("Generated sequence no. " + result);
return new Long(result);
}
}
我怎么知道我需要哪种方法来传递参数?虽然似乎是 getNextSequenceForSequenceName() 方法。
【问题讨论】:
-
让我们看看你的
SequenceGeneratorYYYYMMDD课程。 -
是的,看起来像一个序列,抱歉我很明显,但我发现一些很酷的东西是您可以控制与此相关的一些注释。在休眠状态下谷歌序列以找到它们。我认为参数告诉程序 ANNO_BATCH_JOB_LOG_SEQ 是一个序列。与生成器标签一起放置作为父级可能会告诉 hibernate 将该序列与生成器一起使用。你认为它与某种记录有关吗?