【问题标题】:Hibernate and Postgresql - generator class in hibernate mapping fileHibernate 和 Postgresql - hibernate 映射文件中的生成器类
【发布时间】:2010-09-23 11:59:31
【问题描述】:

我的 postgresql 数据库中的 id 是自动递增的(在数据库中定义了序列)。创建休眠映射文件时,我将类生成器设置为递增:

<class name="model.Names" schema="public" table="names">
    <id name="id" type="int">
      <column name="id"/>
      <generator class="increment"/>
    </id>

但是,我不断收到各种错误(空指针异常、org.hibernate.TransactionException:事务未成功启动),因此我首先想确保这是正确的生成器类,然后再进行调试并在其他地方查找错误。我尝试了序列(根本不起作用,增量在某些情况下有效)。该应用程序是用 JSF 2.0 编写的。

提前感谢您的任何建议。

最好的问候, 无礼。

【问题讨论】:

    标签: hibernate postgresql orm sequences


    【解决方案1】:

    如果您想要使用序列,如果您想要高/低算法生成器,则绝对应该使用sequenceseqhilo 之一。问题是 “根本不起作用” 根本无法帮助您了解您面临的问题。

    以防万一,这里是 sequence 生成器的 sn-p:

    <id name="id" type="long" column="person_id">
            <generator class="sequence">
                    <param name="sequence">person_id_sequence</param>
            </generator>
    </id>
    

    对于seqhilo 生成器:

    <id name="id" type="long" column="cat_id">
            <generator class="seqhilo">
                    <param name="sequence">hi_value</param>
                    <param name="max_lo">100</param>
            </generator>
    </id>
    

    如果您想调查它“根本不起作用”的原因,我建议启用logging of the generated SQL 以查看发生了什么。

    另请注意,在使用 SERIAL 或 BIGSERIAL 列时,PostgreSQL 确实支持identity 生成器(请参阅HB-875HHH-1675)。

    参考文献

    【讨论】:

    • 谢谢,帕斯卡。问题是唯一有效的生成器类是增量。当我尝试使用该序列时,它不会在数据库中添加对象,因为显然 id 不能为空,这使我得出结论,我必须使用不同的生成器类。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-29
    • 2012-12-23
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多