2017-02-14 60 views
0

遷移到Hibernate 5.2.7後,我似乎得到不正確的值爲id字段。休眠5 sequencegenerator沒有給出正確的值

我的代碼:

@Id @SearchableId 
@GeneratedValue(strategy=GenerationType.AUTO, generator="hms_seq_gen") 
@SequenceGenerator(name="hms_seq_gen", sequenceName="patregn_seq") 
protected Integer ID; 

Hibernate的火災此查詢:

select nextval ('patregn_seq')
這給5367.最後一個值的id字段的表是5358.

我也得到這
ERROR: duplicate key value violates unique constraint "patientregistration_pkey" [java] Detail: Key (id)=(5318) already exists.

我是肯定這個問題類似於thisthis,但我不得不問,因爲給那裏的解決方案並沒有爲我工作:

我加

<property value="true" name="hibernate.id.new_generator_mappings"/>

我的persistence.xml,但徒勞無功。任何幫助將不勝感激。

回答

2

實際上,當你遷移到新的Hibernate版本5.2.7時hibernate.id.new_generator_mappings = true默認情況下。但爲了向後兼容,您應該將此標誌更改爲false,請嘗試。 欲瞭解更多信息,請閱讀 - http://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html。只要搜索new_generator_mappings,你就會得到足夠的信息。

+0

感謝您的建議。有用。但我現在有點困惑。根據Steve Ebersole在http://stackoverflow.com/questions/12737092/is-there-a-way-to-dynamically-choose-a-generatedvalue-strategy-using-jpa-annota上的評論,它應該設置爲true得到所描述的行爲 - 這是我認爲我需要的。另外,當我將該屬性設置爲false時,我得到一個警告:'發現使用了不推薦使用的[org.hibernate.id.SequenceGenerator]基於序列的id生成器;使用org.hibernate.id.enhanced.SequenceStyleGenerator來代替。「這,即使當我使用JPA SequenceGenerator –

+0

是的,托馬斯,它會產生一個警告。從用戶指南 - 「現有應用程序可能想要禁用此設置(將其設置爲false),以將兼容性從3.x和4.x升級到5.x.」實際上,當你開始開發你的應用程序時,它應該被設置爲true,但是對於遺留 - 你應該禁用它,否則你的應用程序將失敗。 – idmitriev