java - 如何获取 hibernate 内部属性?

标签 java hibernate generator sequence

我想使用 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/

相关文章:

python - 函数和生成器函数的动态调用(python)

java - 如何使用 RxJava2 将多个单词组合成一个句子?

java - 寻找 3x3 矩阵的余因子和行列式 (java)

mysql - 如何将数据库(MySQL)中的[名称,值]对存储在表的单个列/字段中?

python - Keras fit_generator() - 时间序列的批处理如何工作?

python - 如何将多个阻塞 Python 生成器复用为一个?

java - JDBC java编译运行

java - 在 univocity csv 解析器中转义定界字符

java - 如何在你的库中使用 Spring-Data 以及如何在你的项目中使用这个库?

eclipse - 如何在 Eclipse 中安装 Hibernate Tools?