8

我有以下映射:

    <id name="id" type="java.lang.Long" column="id">
        <generator class="sequence">
            <param name="sequence">tracksdata_seq</param>
        </generator>
    </id>

当我在 Hibernate 4.2 中使用它时,一切都很好。现在我正在迁移到 Hibernate 5 并面临以下问题:

2015-10-06 19:49:50 DEBUG SQL:92 - select nextval ('hibernate_sequence')
2015-10-06 19:49:50 DEBUG SqlExceptionHelper:122 - could not extract ResultSet [n/a]
org.postgresql.util.PSQLException: ERROR: relation "hibernate_sequence" does not exist

如何解决这个问题?

PS休眠5.0.2.Final。

4

3 回答 3

13

你有两个选择:

  1. 您将hibernate.id.new_generator_mappings配置属性设置为 false 并切换回旧的标识符生成器
  2. 您可以从这里更改映射如下:

    <generator class="sequence">
        <param name="sequence">MY_SEQUENCE</param>
    </generator>
    

    至:

    <generator class="org.hibernate.id.enhanced.SequenceStyleGenerator">
        <param name="optimizer">none</param>
        <param name="increment_size">1</param>
        <param name="sequence_name">MY_SEQUENCE</param>
    </generator>
    
于 2016-01-04T09:27:44.087 回答
1

从 Hibernate 4.3.10 迁移到 Hibernate 5.0.4 时,我也遇到了这个问题。像 maksim2020 一样,我<generator class="sequence"><generator class="identity">. 但是,为了保留受影响表的 id 序列,我还必须编写一个 sql 迁移脚本,将列的默认值设置为现有序列的下一个值。在 PostgreSQL 中,这是按如下方式完成的:

ALTER TABLE ONLY affected_table ALTER COLUMN affected_id SET DEFAULT nextval('original_sequence'::regclass);
于 2015-11-23T05:12:23.787 回答
1

使用"sequence_name"而不是"sequence"in <param name="sequence">

这对我有用。

于 2017-07-27T17:52:08.100 回答