我想使用 hibernate 的 TableGenerator 来生成自定义 key
final SessionImpl session = ((SessionImpl) EntityManagerUtils
.getEntityManager("CORE").getDelegate());
TableGenerator generator = new TableGenerator();
Properties params = new Properties(??????????);
// params.put("identifier_normalizer", ?);
params.put("table_name", "eflow.docs_number_generators");
params.put("value_column_name", "tbl.GENERATOR_VALUE");
params.put("segment_column_name", "tbl.GENERATOR_KEY");
params.put("increment_size", "25");
params.put("segment_value", "2011");
generator.configure(IntegerType.INSTANCE, params, session
.getSessionFactory().getDialect());
Serializable id = generator.generate(session, new Object());
System.out.println(id);
但缺少带有键“identifier_normalizer”的对象,此代码段抛出空指针异常。此对象属于 ObjectNameNormalizer
类型,它规范化数据库对象名称并存储在 hibernate 本地映射中。
如何访问 hibernate 的内部映射并因此访问此 ObjectNameNormalizer
对象?
实际上,看起来我需要 hibernate Mappings 对象,我不知道如何获取它。
提前致谢
最佳答案
解决方案来了:
private String generateKey() {
final SessionImpl session = ((SessionImpl) em.getDelegate());
if (generator == null) {
synchronized (TableGenerator.class) {
if (generator == null) {
generator = new TableGenerator();
ObjectNameNormalizer normalizer = new ObjectNameNormalizer() {
@Override
protected boolean isUseQuotedIdentifiersGlobally() {
return false;
}
@Override
protected NamingStrategy getNamingStrategy() {
return new Configuration().getNamingStrategy();
}
};
Properties params = new Properties();
params.put("identifier_normalizer", normalizer);
params.put("table_name", "eflow.docs_num_generators");
params.put("value_column_name", "GENERATOR_VALUE");
params.put("segment_column_name", "GENERATOR_KEY");
params.put("increment_size", "25");
params.put("segment_value", "2011");
generator.configure(IntegerType.INSTANCE, params, session
.getSessionFactory().getDialect());
}
}
}
Serializable id = generator.generate(session, new Object());
return id.toString();
}
关于java - 如何获取 hibernate 内部属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12305888/