我是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()方法。
答案 0 :(得分:0)
来自Hibernate docs 5.1.4.1. Generator
可选的
<generator>
子元素命名一个Java类,用于为持久化类的实例生成唯一标识符。 如果需要任何参数来配置或初始化生成器实例,则使用<param>
元素传递它们。
<id name="id" type="long" column="cat_id">
<generator class="org.hibernate.id.TableHiLoGenerator">
<param name="table">uid_table</param>
<param name="column">next_hi_value_column</param>
</generator>
</id>