programing

SQL Server 2016 - 잘못된 개체 이름 'hibernate_sequence'

telebox 2023. 7. 21. 21:33
반응형

SQL Server 2016 - 잘못된 개체 이름 'hibernate_sequence'

MS SQL 서버 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; 

그럼에도 불구하고 저는 계속해서 이전 오류를 받습니다.

제가 뭘 잘못하고 있는지 아십니까?

잘 부탁드립니다.

확인해야 할 사항은 다음과 같습니다.

  • 어떤 방언을 사용하고 있습니까?
  • 사용 중인 최대 절전 모드 버전은 무엇입니까?버전 5에서 GenerationType이 변경되었습니다.자동 동작
  • 세트"hibernate.hbm2ddl.auto"로.update데이터베이스에 무엇이 생성되는지 확인합니다.
  • 피하다GenerationType.AUTO명시적으로 설정GenerationType.IDENTITY또는GenerationType.SEQUENCE원하는 항목이나 DB가 지원하는 항목에 따라 달라집니다.
  • 최신 SQL Server JDBC 드라이버가 있는지 확인합니다.Hibernate 4.3에서 5.0으로 마이그레이션하는 데 문제가 있었습니다.
  • 최대 절전 모드 5세트hibernate.id.new_generator_mappings거짓으로

SqlServer 버전을 업그레이드하는 것 같습니다.SqlServer 2012를 SqlServer 2017로 업그레이드할 때 이 문제에 직면했습니다.

이로 인해 발생합니다. 드라이버(jtds 또는 sqlserver)와 SqlServer 2017+ 간의 대화가 더 이상 "dbo.hibernate_sequence" 테이블을 해결 방법으로 간주하지 않습니다.특히 hibernate_sequence라는 이름의 시퀀스가 필요합니다.

솔루션 : dbo.complete_sequence라는 이름의 테이블을 삭제하고 시퀀스를 만듭니다.

예:

USE [your_database_name]
GO
CREATE SEQUENCE [dbo].[hibernate_sequence] 
 AS [bigint]
 START WITH 10000000
 INCREMENT BY 1
 MINVALUE -9223372036854775808
 MAXVALUE 9223372036854775807
 CACHE 
GO

SqlServer Studio 스크린샷

이를 위해서는 설명서를 꼭 봐야 합니다.당신이 여기에 가지고 있는 질문은 완전히 틀렸습니다.그리고 왜 시퀀스에 쿼리 힌트를 사용하려고 합니까?

올바른 구문을 사용하면 다음과 같습니다.

select next value FOR hibernate_sequence as next_val

여기 이것에 대한 설명서가 있습니다.https://learn.microsoft.com/en-us/sql/t-sql/functions/next-value-for-transact-sql

스프링부츠 프로젝트에서도 같은 오류가 발생했습니다.나의 경우 그 오류com.microsoft.sqlserver.jdbc.SQLServerException: Invalid object name 'sys.sequences'를 사용하지 않는 SQL Server 2008 버전을 사용했기 때문에 표시됩니다.sys.sequences물건.

저는 sql server 2017로 전환했고 잘 작동하고 있습니다.

저는 이 문제가 있었고 저의 경우에는 SQLServerDialect에서 SQLServer2012Dialect로 방언을 변경해야 했습니다.첫 번째는 시퀀스에 대한 구현이 없습니다.

언급URL : https://stackoverflow.com/questions/49037803/sql-server-2016-invalid-object-name-hibernate-sequence

반응형