我有一个MySQL数据库,使用Hibernate框架,来自2个不同主机的2个Java进程正在访问它。 由于我希望数据库在从主机上的进程访问时保持一致,因此我使用SQL将表I的主键作为auto_increment在底层数据库中访问(虽然我想要一个解决方案是auto_increment来自Hibernate,我无法让它工作。) 现在我的问题是hibernate在内存中缓存对象,并且当执行持久操作时,我在并发访问时会遇到重复的主键错误。我的理解是,这是由于Hibernate使用基于它在上次读取时读取的最高主键的主键号。但由于另一个进程可以更新数据库,因此使用hibernate的最新主键值是陈旧的,最终使用现有的(由其他进程更新)主键。
我想知道是否有办法避免持久化来自hibernate的主键(因为它导致重复)字段,并允许DB使用auto_increment来确定它。
答案 0 :(得分:0)
您应该将生成策略更改为sequence
或guid
(具体取决于您的数据库)。这些是安全且更好的,因为id生成将在数据库中发生。
请参阅此StackOverflow答案: How to choose the id generation strategy when using JPA and Hibernate