programing

최대 절전 모드에서 생성된 DDL의 구문 오류 "type= MyISAM"이 잘못되었습니다.

copysource 2023. 1. 14. 10:30
반응형

최대 절전 모드에서 생성된 DDL의 구문 오류 "type= MyISAM"이 잘못되었습니다.

자바 코드로 이 에러가 발생.

   Caused by :`com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException`: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB` server version for the right syntax to use near 'type = `MyISAM`' at line 1

휴지 상태에 의해 전달된 쿼리는 다음과 같습니다.

Hibernate: create table EMPLOYEE (emp_id integer not null, FNAME varchar(255), LNAME varchar(255), primary key (emp_id)) type=MyISAM

이 오류와 관련된 모든 질문을 확인했습니다.그러나 그 모든 질문에서 사용자 자신이 쿼리를 전달하고 있습니다.type = MyISAM"그들이 변할 수 있도록"type" ~로engine" 단, 여기에서는 휴지 상태가 테이블의 작성을 담당하기 때문에 어디에 오류가 있는지, 어떻게 수정할 수 있는지 알 수 없습니다.

설정 파일은 다음과 같습니다.

<hibernate-configuration>
 <session-factory >
 <property name="hibernate.hbm2ddl.auto">create</property>
  <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
  <property name="hibernate.connection.url">jdbc:mysql://localhost/servletcheck</property>
  <property name="hibernate.connection.username">root</property>
  <property name="hibernate.connection.password"> </property>
  <property name="hibernate.dialect"> org.hibernate.dialect.MySQLDialect</property>
  <property name="hibernate.show_sql">true</property>
  <mapping resource="Employee.hbm.xml"/>
 </session-factory>
</hibernate-configuration>

매핑 파일은 다음과 같습니다.

<hibernate-mapping>
    <class name="first.Employee" table="EMPLOYEE">
        <id name="id" type="int">
            <column name="emp_id" />
            <generator class="assigned" />
        </id>
        <property name="fname" type="java.lang.String">
            <column name="FNAME" />
        </property>
        <property name="lname" type="java.lang.String">
            <column name="LNAME" />
        </property>
    </class>
</hibernate-mapping>

다음은 제 클래스 파일입니다.

public class StoreData {
    public static void main(String[] args) {
        Configuration cfg=new Configuration();
        cfg.configure("hibernate.cfg.xml");
        SessionFactory factory=cfg.buildSessionFactory();
        Session session=factory.openSession();
        org.hibernate.Transaction t=session.beginTransaction();
        Employee e=new Employee();
        e.setId(1);
        e.setFname("yogesh");
        e.setLname("Meghnani");
        session.persist(e);
        t.commit();

    }
}

Hibernate 5.x 이전 버전에서는 - 사투리가org.hibernate.dialect.MySQLDialect는 MySQL 4.x 이전 버전용입니다.단편TYPE=MYISAMMySQL 4.0에서는 폐지되어 5.5에서는 삭제되었습니다.

MariaDB를 사용하는 경우 다음 중 하나를 사용해야 합니다(MariaDB 버전 및 최대 절전 모드 버전에 따라 다름).

  • org.hibernate.dialect.MariaDBDialect
  • org.hibernate.dialect.MariaDB53Dialect

MySQL을 사용하는 경우 또는 MariaDB에 대한 위의 두 가지 사투리가 현재 사용 중인 Hibernate 버전에 존재하지 않는 경우:

  • org.hibernate.dialect.MySQL5Dialect
  • org.hibernate.dialect.MySQL55Dialect
  • org.hibernate.dialect.MySQL57Dialect

사투리와 관련된 문제인데org.hibernate.dialect.MySQLDialect함께 가도 좋다org.hibernate.dialect.MySQL5Dialect잘 될 거예요.

이 오류는 더 많은 조직이 이전 버전 5의 언어를 사용하는 동안 MySQL 8.x를 설치하려고 이동함에 따라 발생할 수 있습니다.

2020년 6월 6일 현재 최신 Hibernate 5.4 배포판에는 다음과 같은 MySQL 사투리가 포함되어 있습니다.

  • MySQL55 Dialect
  • MySQL57 Dialect
  • MySQL57InnoDBDialect
  • MySQL5Dialect
  • MySQL8Dialect
  • MySQLDirect
  • MySQLInnoDBDirect
  • MySQLISAMDualect

현재 휴지 상태 5.4 MySQL 방언

MySQL용으로 필터링된 코어 jar 파일의 방언은 다음과 같습니다.올바른 타입의 타입을 사용=MyISAM MySQL 예외는 과거의 것이 됩니다.

여기에 이미지 설명 입력

MySQL 4.x.x 버전 이전에는테이블을 저장하는 데 TYPE MYISAM 엔진이 사용되지만 MySQL 5.x.x 이상 버전에서는 테이블을 저장하는 데 엔진 = MYISAM이 사용됩니다.

MySQL 4.x.x 또는 < 4.x.x 의 경우

CREATE TABLE t (i INT) TYPE = MYISAM;

MySQL 5.x.x 또는 5.x.x보다 큰 경우

CREATE TABLE t (i INT) ENGINE = MYISAM;

이제 겨울잠에 대해 얘기해보죠

휴지 상태에서는 아래 사투리를 사용해야 합니다.

MySQL <= 4.x.x

<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

MySQL > = 5.x.x.x.

<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>

잘 될 거예요.

MySQL은 MyISAM을 기본 엔진으로 폐기했습니다.현재는 InnoDB를 사용하고 있습니다.Sequel Pro를 사용하여 원하는 테이블을 클릭한 후 아래 쿼드런트에서 테이블 정보를 찾아 이를 확인할 수 있습니다.

여기에 이미지 설명 입력

창 위쪽에서 MySQL 버전을 확인합니다.

여기에 이미지 설명 입력

위의 정보를 사용하여 사투리가 필요하다는 것을 알 수 있습니다.

org.hibernate.dialect.MySQL5InnoDBDialect

application.properties에서 사투리를 설정할 수 있습니다.

오래된 게시물인 것은 알지만 다른 경험을 공유합니다.저도 똑같은 예외를 보고 있었는데, MySQL 8과 Springboot+JPA+Hibernate를 사용하고 있었습니다.

사투리가...

spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL8Dialect

하지만 나는 여전히 그 문제를 보고 있었다.몇 가지 트러블 슈팅 후 스키마 SQL에 문제가 있음을 알게 되었습니다.여기서 테이블 작성 스크립트는 모두 Caps로 되어 있어 작은 사이즈로 되어 있을 것으로 예상됩니다.예를들면

CREATE TABLE  item_catalog

대신

CREATE TABLE  ITEM_CATALOG

schema sql의 대소문자를 소문자 테이블명으로 변경 후 정상적으로 동작하였습니다.

MySql 데이터베이스를 사용할 때는 사투리 변경이 잘 되지 않기 때문입니다.가장 쉬운 방법은 표준 버전의 SQL 커넥터를 다운로드하여 사용하는 것입니다.정말 잘 작동했어요.

http://www.java2s.com/Code/Jar/m/Downloadmysqlconnectorjar.htm

시스템에서 사용할 수 있는 사투리가 필요한 데이터베이스에 관계없이 사용 가능한 사투리를 찾을 수 있습니다.

> 프로젝트 > 라이브러리 > 휴지 상태 코어 > org.hibernate.dialect

그러면 서로 다른 데이터베이스에 대한 여러 "변증" 클래스의 패키지가 나타나고, 이 클래스가 제대로 작동하는지 테스트할 수 있습니다. 케이스는 하이버네이션용입니다.

언급URL : https://stackoverflow.com/questions/43716068/invalid-syntax-error-type-myisam-in-ddl-generated-by-hibernate

반응형