1

我的 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 编写的。

在此先感谢您的任何建议。

最好的问候,萨斯。

4

1 回答 1

2

如果你使用序列,你绝对应该使用其中一个,sequence或者seqhilo如果你想要一个高/低算法生成器。问题是“根本不起作用”根本无法帮助您了解您面临的问题。

以防万一,这里是sequence生成器的一个片段:

<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>

如果您想调查它“根本不起作用”的原因,我建议启用对生成的 SQL 的日志记录以查看发生了什么。

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

参考

于 2010-09-23T14:55:15.003 回答