rPa*_*thi 82 java spring hibernate
我尝试在Spring项目的项目中将hibernate从4升级到5 4.2.升级完成后,当我调用更新方法时,我在堆栈跟踪中发现以下错误.
10:53:32,185 ERROR TableStructure:149 - could not read a hi value
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'test.hibernate_sequence' doesn't exist
Run Code Online (Sandbox Code Playgroud)
我用注释更改了自动递增的Id
@GeneratedValue(strategy=GenerationType.AUTO)
Run Code Online (Sandbox Code Playgroud)
仍然是错误.
Kik*_*kou 118
你也可以把:
@GeneratedValue(strategy = GenerationType.IDENTITY)
Run Code Online (Sandbox Code Playgroud)
让DateBase管理主键的增量:
AUTO_INCREMENT PRIMARY KEY
Run Code Online (Sandbox Code Playgroud)
Riv*_*ota 47
使用Spring Boot
将下面的字符串放在.application.properties中
spring.jpa.properties.hibernate.id.new_generator_mappings=false
Run Code Online (Sandbox Code Playgroud)
在Hibernate 4.X上,此属性默认为true.
Vis*_*mar 25
这就是出现此错误的原因:
它将查找您使用的数据库如何生成ID.对于MySql或HSQSL,有增量字段自动递增.在Postgres或Oracle中,它们使用序列表.由于您没有指定序列表名称,因此它将查找名为hibernate_sequence的序列表并将其用作默认值.所以你可能在数据库中没有这样的序列表,现在你得到了那个错误.
Raj*_*han 15
我得到了相同的错误"com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:表'mylocaldb.hibernate_sequence'不存在".
使用spring mvc 4.3.7和hibernate 5.2.9版,应用程序是使用基于spring java的配置.现在我必须hibernate.id.new_generator_mappings在我的代码中添加@Eva Mariam提到的属性,如下所示:
@Autowired
@Bean(name = "sessionFactory")
public SessionFactory getSessionFactory(DataSource dataSource) {
LocalSessionFactoryBuilder sessionBuilder = new LocalSessionFactoryBuilder(dataSource);
sessionBuilder.addProperties(getHibernateProperties());
sessionBuilder.addAnnotatedClasses(User.class);
return sessionBuilder.buildSessionFactory();
}
private Properties getHibernateProperties() {
Properties properties = new Properties();
properties.put("hibernate.show_sql", "true");
properties.put("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
properties.put("hibernate.id.new_generator_mappings","false");
return properties;
}
Run Code Online (Sandbox Code Playgroud)
它就像魅力一样有效.
Li *_*ing 13
FYI
如果您使用hbm文件来定义O/R映射.
请注意:
在Hibernate 5中,序列名称的参数名称已更改.
以下设置在Hibernate 4中运行良好:
<generator class="sequence">
<param name="sequence">xxxxxx_seq</param>
</generator>
Run Code Online (Sandbox Code Playgroud)
但在休眠5,相同的映射设置文件会导致"hibernate_sequence不存在"的错误.
要修复此错误,参数名称必须更改为:
<generator class="sequence">
<param name="sequence_name">xxxxxx_seq</param>
</generator>
Run Code Online (Sandbox Code Playgroud)
这个问题浪费了我2,3个小时.
不知何故,看起来没有关于它的文件.
我必须阅读org.hibernate.id.enhanced.SequenceStyleGenerator的源代码来弄清楚它
小智 8
当你使用
@GeneratedValue(strategy=GenerationType.AUTO)
或者
@GeneratedValue 这是上面的简写方式,Hibernate 开始为你决定最佳的生成策略,在这种情况下它选择了
GenerationType.SEQUENCE 作为战略,这就是为什么它正在寻找
schemaName.hibernate_sequence 这是一个表,用于基于序列的 id 生成。
当您使用GenerationType.SEQUENCE作为策略时,您需要提供@TableGenerator以下内容。
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "user_table_generator")
@TableGenerator(name = "user_table_generator",
table = "user_keys", pkColumnName = "PK_NAME", valueColumnName = "PK_VALUE")
@Column(name = "USER_ID")
private long userId;
Run Code Online (Sandbox Code Playgroud)
当您将策略设置为
@GeneratedValue(strategy = GenerationType.IDENTITY) .
原来的问题得到解决,因为然后 Hibernate 停止寻找序列表。
以防万一有人像我今天一样因为这个问题而把头发拉出来,我无法解决这个错误,直到我改变
spring.jpa.hibernate.dll-auto=create
Run Code Online (Sandbox Code Playgroud)
到
spring.jpa.properties.hibernate.hbm2ddl.auto=create
Run Code Online (Sandbox Code Playgroud)
小智 5
在hibernate 5.x中,您应该在hibernate.cfg.xml中将set hibernate.id.new_generator_mappings设置为false
<session-factory>
......
<property name="show_sql">1</property>
<property name="hibernate.id.new_generator_mappings">false</property>
......
</session-factory>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
85857 次 |
| 最近记录: |