itsource

휴지 상태 시퀀스가 존재하지 않습니다.

mycopycode 2022. 9. 3. 14:15
반응형

휴지 상태 시퀀스가 존재하지 않습니다.

.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 

주석으로 자동 증분 ID를 변경했습니다.

@GeneratedValue(strategy=GenerationType.AUTO) 

아직 에러가 발생.

다음과 같은 것도 넣을 수 있습니다.

@GeneratedValue(strategy = GenerationType.IDENTITY)

프라이머리 키의 증분을 DateBase에서 관리할 수 있도록 합니다.

AUTO_INCREMENT PRIMARY KEY

로로로 5 로로로로로 xx.x x<property name="hibernate.id.new_generator_mappings">false</property>를 참조해 주세요.

4.의 hibernate 4.:<prop key="hibernate.id.new_generator_mappings">false</prop>

스프링 부트의 조작

솔루션

.application.properties에 다음 문자열을 입력합니다.

spring.jpa.properties.hibernate.id.new_generator_mappings=false

설명.

4. 디폴트로 X "Atribut " 입니다.true.

이 에러의 원인은 다음과 같습니다.

사용하고 있는 데이터베이스가 ID를 생성하는 방법을 검색합니다.MySql 또는 HSQSL의 경우 자동으로 증가하는 증분 필드가 있습니다.Postgres 또는 Oracle에서는 시퀀스 테이블을 사용합니다.시퀀스 테이블 이름을 지정하지 않았기 때문에 hibernate_sequence라는 이름의 시퀀스 테이블을 검색하여 기본값으로 사용합니다.따라서 데이터베이스에 이러한 시퀀스 테이블이 없을 수 있으며 이 오류가 발생합니다.

참고:

hbm 파일을 사용하여 O/R 매핑을 정의하는 경우.

주의:

휴지 상태 5에서 시퀀스 이름의 매개 변수 이름이 변경되었습니다.

Hibernate 4 에서는, 다음의 설정이 올바르게 동작했습니다.

<generator class="sequence">
    <param name="sequence">xxxxxx_seq</param>
</generator>

그러나 휴지 상태 5에서는 동일한 매핑 설정 파일로 인해 "hibernate_sequence does not exist" 오류가 발생합니다.

이 오류를 수정하려면 매개 변수 이름을 다음과 같이 변경해야 합니다.

<generator class="sequence">
    <param name="sequence_name">xxxxxx_seq</param>
</generator>

이 문제로 나는 두세 시간을 낭비했다.

그리고 어쩐지 서류는 없는 것 같아요.

저는 org.hibernate.id.dll의 소스 코드를 읽어야 합니다.Sequence Style Generator를 사용하여 알아냅니다.

같은 에러 「com.mysql.jdbc.exceptions.jdbc4」가 표시됩니다.MySQL SyntaxErrorException:테이블 'mylocaldb.hibernate_sequence'는 존재하지 않습니다.

spring 4. 및 기반 을 사용합니다spring mvc 4.3.7은 hibernate 5.2.9로 spring java는 java는 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;
    }

그리고 그것은 매력적으로 작용했다.

사용할 때

@GeneratedValue(strategy=GenerationType.AUTO)

또는

@GeneratedValue위의 간단한 방법이지만, 휴지기는 당신을 위한 최적의 생성 전략을 결정하기 시작합니다.이 경우, 하이버네이트는 선택되었습니다.

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;

전략을 설정했을 때마찬가지로

@GeneratedValue(strategy = GenerationType.IDENTITY).

휴지 상태가 되면 시퀀스 테이블 검색이 중지되므로 원래 문제가 해결됩니다.

오늘처럼 누군가 이 문제로 머리를 뽑을 경우를 대비해서, 저는 이 오류를 바꿀 때까지 해결할 수 없었다.

spring.jpa.hibernate.dll-auto=create

로.

spring.jpa.properties.hibernate.hbm2ddl.auto=create

hibernate 5.x에서는 hibernate.cfg.xml의 false에 set hibernate.id.new_disples_disples를 추가해야 합니다.

<session-factory>
    ......
    <property name="show_sql">1</property>
    <property name="hibernate.id.new_generator_mappings">false</property>
     ......
 </session-factory>

휴지 상태 5 이전 버전을 사용하는 경우@GeneratedValue(strategy = GenerationType.IDENTITY)마법처럼 작용합니다.단, 휴지 상태5 이후 다음과 같은 수정이 필요합니다.

@Id
@GeneratedValue(strategy= GenerationType.AUTO,generator="native")
@GenericGenerator(name = "native",strategy = "native")
private Long id;

DDL

`id` BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY

이유

휴지 상태 문제에서 발췌.

현재 hibernate.id.new_generation_http가 false로 설정되어 있는 경우 @GeneratedValue(전략 = GenerationType)입니다.AUTO)는 네이티브에 매핑됩니다.이 속성이 참이면(5.x의 디폴트 값) @GeneratedValue(전략 = GenerationType).AUTO)는 항상 SequenceStyleGenerator에 매핑됩니다.

따라서 시퀀스를 네이티브로 지원하지 않는 데이터베이스(예: MySQL)에서는 IDENTY 대신 TABLE 생성기를 사용합니다.

그러나 TABLE 생성기는 이동성이 더 높지만 데이터베이스에서 값을 가져올 때마다 별도의 트랜잭션을 사용합니다.실제로 IDENTY가 JDBC 배치 업데이트를 디세블로 하여 TABLE 생성기가 풀링된 옵티마이저를 사용하는 경우에도 IDENTY는 더 잘 확장됩니다.

다음과 같은 것도 넣을 수 있습니다.

@GeneratedValue(strategy = GenerationType.IDENTITY)

프라이머리 키의 증분을 DateBase에서 관리할 수 있도록 합니다.

AUTO_INCREMENT PRIMARY KEY

위의 답변이 도움이 되었습니다.

순서 1: application.properties로 들어갑니다.

spring.jpa.properties.hibernate.id.new_generator_mappings=false

2단계 : 프라이머리 키 열이 자동 증가 유형인지 확인합니다.

ALTER TABLE EMPLOYEES MODIFY COLUMN ID INT AUTO_INCREMENT;

이 문제는 HH-10876이 수정되었기 때문에 발생할 수 있습니다.다음으로 업데이트 해 주세요.

  • ORM 5.2.1을 휴지 상태로 합니다.
  • ORM 5.1.1을 휴지 상태로 합니다.
  • ORM 5.0.11의 휴지 상태

포스트그레스에는 하이버네이트 시퀀스를 추가했습니다.PostGres Editor에서 다음 쿼리를 실행합니다.

    CREATE SEQUENCE hibernate_sequence
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 2
  CACHE 1;
ALTER TABLE hibernate_sequence
  OWNER TO postgres;

질의 사용의 장단점을 알아보겠습니다만, 도움이 필요한 분은 이용하실 수 있습니다.

내 경우 모든 주석 바꾸기GenerationType.AUTO타고GenerationType.SEQUENCE문제를 해결했습니다.

이 쿼리 실행

create sequence hibernate_sequence start with 1 increment by 1

언급URL : https://stackoverflow.com/questions/32968527/hibernate-sequence-doesnt-exist

반응형