2015-10-06 60 views
7

我有以下映射:冬眠5:发电机类=“序列”工作不

<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 

如何解决此问题?

P.S. Hibernate 5.0.2.Final。

+0

它正在寻找序列hibernate_sequence,你在上面的映射中提到过吗?你有tracksdata_seq,不知道这是否涉及hyberante_sequence – Zeus

+0

这不应该指的是hibernate_sequence - 它必须使用tracksdata_seq,就像它在休眠4.2。 – maksim2020

+0

@ maksim2020我有从4.3.8迁移到5.0.6Final的相同问题。这只会在您使用XML映射时发生。我切换到JPA注释,它工作正常。 – Gustavo

回答

0

我在Hibernate 5.0.2.Final中重现了这个问题。 我已更改值hibernate.id.new_generator_mappings设置为false,但没有帮助。 我想知道Hibernate 5是否仍然支持基于XML的映射。

+0

Hibernate仍支持基于XML的映射。我通过用替换并通过串行类型(PostgreSQL中)更改数据库中的所有对应字段来解决我的问题。 – maksim2020

0

从Hibernate 4.3.10迁移到Hibernate 5.0.4时,我也遇到过这个问题。像maksim2020一样,我用<generator class="identity">替换了<generator class="sequence">的实例。但是,为了保留受影响表的id序列,我还必须编写一个sql迁移脚本,将该列的默认值设置为现有序列的下一个值。

ALTER TABLE ONLY affected_table ALTER COLUMN affected_id SET DEFAULT nextval('original_sequence'::regclass); 
6

你有两个选择:

  1. 您的hibernate.id.new_generator_mappings配置属性设置为false,切换回旧的标识生成器
  2. 你改变映射在PostgreSQL此如下完成如下,从这样的:

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

使用param name="sequence_name"代替"sequence",它为我工作。