SQL Server 2016 - 无效的对象名称' hibernate_sequence'

时间:2018-02-28 20:13:50

标签: sql-server jpa spring-boot

我有一个映像备份,我将其还原到MS SQL Server 2016。 我有一个实体声明它的id:

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@XmlID
@XmlElement
@XmlJavaTypeAdapter(IntToStringXmlAdapter.class)
private Integer id;

当我保存我收到的实体时:

Hibernate: select next_val as id_val from hibernate_sequence with (updlock, rowlock) 2018-02-28 22:05:41.935 
ERROR 18152 --- [nio-8080-exec-6] o.hibernate.id.enhanced.TableStructure   : could not read a hi value com.microsoft.sqlserver.jdbc.SQLServerException: Invalid object name 'hibernate_sequence'. 

...... 
2018-02-28 22:05:41.942  WARN 18152 --- [nio-8080-exec-6] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 208, SQLState: S0002 

2018-02-28 22:05:41.942 ERROR 18152 --- [nio-8080-exec-6] o.h.engine.jdbc.spi.SqlExceptionHelper   : Invalid object name 'hibernate_sequence'.

我手工创建了SQL服务器的序列,并确保它通过SSMS存在。

CREATE SEQUENCE hibernate_sequence
 AS INTEGER
 START WITH 1
 INCREMENT BY 1
 MINVALUE 1
 MAXVALUE 99
 NO CYCLE; 

尽管如此,我还是继续接收上一个错误。

任何想法我做错了什么?

提前谢谢

3 个答案:

答案 0 :(得分:11)

以下要点检查:

  • 你正在使用什么方言?
  • 您使用的是什么hibernate版本? 版本5更改了GenerationType.AUTO行为
  • "hibernate.hbm2ddl.auto"设置为update并查看其在数据库中创建的内容
  • 避免使用GenerationType.AUTO。根据您的需要或您的数据库支持,将其设置为GenerationType.IDENTITYGenerationType.SEQUNCE
  • 检查您是否拥有最新的SQL Server JDBC驱动程序。 I had issues with it migrating from hibertnate 4.3 to 5.0
  • 在hibernate 5中将hibernate.id.new_generator_mappings设置为false

答案 1 :(得分:0)

您真的需要查看相关文档。你在这里的查询是完全错误的。为什么要尝试在序列上使用查询提示?

正确的语法看起来就是这样。

select next value FOR hibernate_sequence as next_val

这是关于此的文档。 https://docs.microsoft.com/en-us/sql/t-sql/functions/next-value-for-transact-sql

答案 2 :(得分:0)

我在 spring boot 项目中也遇到了同样的错误。 就我而言,显示错误 com.microsoft.sqlserver.jdbc.SQLServerException: Invalid object name 'sys.sequences' 是因为我使用的是没有 sys.sequences 对象的 sql server 2008 版本。

我切换到 sql server 2017 并且工作正常。