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
이를 위해서는 설명서를 꼭 봐야 합니다.당신이 여기에 가지고 있는 질문은 완전히 틀렸습니다.그리고 왜 시퀀스에 쿼리 힌트를 사용하려고 합니까?
올바른 구문을 사용하면 다음과 같습니다.
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
'programing' 카테고리의 다른 글
특히 malloc가 하나 이상 있을 때 C에서 malloc 고장을 어떻게 올바르게 처리할 수 있습니까? (0) | 2023.07.26 |
---|---|
콜리메이션이 이해가 안 돼요?(Mysql, RDBMS, 문자 집합) (0) | 2023.07.21 |
Oracle 번호 및 varchar 조인 (0) | 2023.07.21 |
oracle "order by" 부품에서 SQL 주입 방지 (0) | 2023.07.21 |
이진 트리를 구현하는 방법은 무엇입니까? (0) | 2023.07.21 |