최대 절전 모드에서 생성된 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=MYISAM
MySQL 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
'programing' 카테고리의 다른 글
멀티레벨 어레이를 사람이 읽을 수 있는 형식으로 출력하려면 어떻게 해야 합니까? (0) | 2023.01.14 |
---|---|
전체 MySQL 데이터베이스 복제 (0) | 2023.01.14 |
유사한 데이터를 올바른 방법으로 표를 만드는 방법 (0) | 2023.01.14 |
문자열이 비어 있는지 확인하는 함수가 항상 true를 반환하는 이유는 무엇입니까? (0) | 2023.01.14 |
Python에서 UTF-8 파일에 쓰기 (0) | 2023.01.14 |