我有一个映像备份,我将其还原到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;
尽管如此,我还是继续接收上一个错误。
任何想法我做错了什么?
提前谢谢
答案 0 :(得分:11)
以下要点检查:
"hibernate.hbm2ddl.auto"
设置为update
并查看其在数据库中创建的内容GenerationType.AUTO
。根据您的需要或您的数据库支持,将其设置为GenerationType.IDENTITY
或GenerationType.SEQUNCE
。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 并且工作正常。