2015-10-06 58 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",它爲我工作。