2017-02-14 71 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