휴지 상태:MyISAM 대신 Mysql InnoDB 테이블 생성
MyISAM 대신 Hibernate(JPA 사용)를 사용하여 MySQL InnoDB 테이블을 만드는 방법은 무엇입니까? Hibernate를 사용하여 테이블을 만드는 SQL 파일을 생성할 때 작동하는 솔루션을 찾았지만 "온 더 플라이"로 작동하는 것은 없습니다.
휴지 상태 사투리를 지정하여
hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
편집
MySQL 버전 > 5.1 이후로는 다음과 같습니다.
hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
MySQL에서 "TYPE = InnoDB"를 사용하면 예외가 발생합니다.
다음 링크로 이동합니다.
다음과 같이 명기되어 있습니다.
전통적으로 MySQL은 비트랜잭션 MyISAM 스토리지 엔진을 사용했으며 MySQL55Dialect보다 오래된 모든 방언에 대한 기본 스토리지 엔진입니다.MySQL55Dialect 이후로는 기본적으로 InnoDB 스토리지 엔진이 사용됩니다.
application.properties(또는 설정)에 다음 내용을 입력합니다.
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL55Dialect
위쪽에 55번지 주목해 - 5번지뿐만 아니라
콘솔에서도 확인할 수 있습니다.
Hibernate: create table users_events (user_id bigint not null, event_id bigint not null) engine=InnoDB
Hibernate: create table users_roles (user_id bigint not null, role_id bigint not null) engine=InnoDB
도움이 됐으면 좋겠다.
휴지 상태 구성에서 방언 설정을 지정하시겠습니까?그렇지 않으면 Hibernate는 데이터베이스 방언 자동검출을 시도하고 가장 안전한 MySQL dialec(MySQL 4 MyISAM)을 선택합니다.
휴지 상태 속성에 다음과 같이 추가하여 특정 사투리를 지정할 수 있습니다.
hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
휴지 상태 5.2.8 현재Mysql*InnoDBDialect
다른 답변이 사용한 클래스는 권장되지 않습니다.새로운 솔루션은 다음 속성을 설정하는 것입니다.
hibernate.dialect.storage_engine = innodb
상세한 것에 대하여는, http://in.relation.to/2017/02/20/mysql-dialect-refactoring/ 를 참조해 주세요.
spring-boot 2.0.0M7에서는 다음 작업이 가능했습니다(mysqld 5.7).
spring.jpa.hibernate.use-new-id-generator-mappings: true
spring.jpa.database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
새로운 버전의 경우,
hibernate.dialect.storage_engine=innodb
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.dialect의 다른 옵션은 MySQL55Dialect 또는 MySQL57Dialect입니다.
Spring Boot 2의 경우
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect
spring.jpa.properties.hibernate.dialect.storage_engine=innodb
Hibernate 5.2.8+를 사용하는 경우 MySQL55Dialect를 사용해 보십시오.MySQL55Dialect는 Jules가 제공한 링크에 따라 기본적으로 innoDB를 스토리지 엔진으로 설정합니다.
Spring 3.2에서 hibernate4를 사용하여 JPA로 포장하려고 했습니다.
결국 나만의 클래스를 만들고 org.springframework.orm.jpa.vendor의 모든 내용을 복사했습니다.HibernateJpaVendorAdapter를 내 클래스 파일로 만들고 하나의 서브루틴 출력을 변경하여 MySQL 사투리를 MySQL5InnoDBDialect로 변경합니다.수업을 연장할 수도 있었을 것 같아요.
아무튼...
수정 내용:
package com.imk.dao.hibernate;
public class HibernateJpaVendorAdapter extends AbstractJpaVendorAdapter {
[ snip snip snip --- use the original code ]
protected Class determineDatabaseDialectClass(Database database) {
switch (database) {
case DB2:
return DB2Dialect.class;
case DERBY:
return DerbyDialect.class;
case H2:
return H2Dialect.class;
case HSQL:
return HSQLDialect.class;
case INFORMIX:
return InformixDialect.class;
case MYSQL:
return MySQL5InnoDBDialect.class;
case ORACLE:
return Oracle9iDialect.class;
case POSTGRESQL:
return PostgreSQLDialect.class;
case SQL_SERVER:
return SQLServerDialect.class;
case SYBASE:
return SybaseDialect.class;
default:
return null;
}
}
}
당신은 이것이 '핵'이라고 생각할지 모르지만, 나는 그것이 효과가 있을 것이라고 생각한다.Spring 컨텍스트Configuration에서 다음과 같이 추가했습니다.
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="persistenceUnitName" value="MosJPA" />
<property name="jpaVendorAdapter">
<bean class="com.imk.dao.hibernate.HibernateJpaVendorAdapter">
<property name="database" value="MYSQL" />
</bean>
</property>
</bean>
그러면 내 클래스는 "데이터베이스" 어댑터 빈으로 사용됩니다.(컴포넌트 스캔은 없습니다.클래스는 META-INF/persistence.xml(기본 위치)에 표시됩니다).
application.yml을 선택한 경우
spring:
jpa:
properties:
hibernate:
dialect: org.hibernate.dialect.MySQL5InnoDBDialect
다음은 persistence.xml에서 수정한 속성입니다.개발 스택에 관계없이 봄이나 휴지 상태에서 직접 사용할 수 있습니다.
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
<property name="hibernate.dialect.storage_engine" value="innodb"/>
오, 이런...미안, 얘들아...더 많은 구글링을 통해 다른 검색 결과를 얻을 수:
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="persistenceUnitName" value="MosJPA" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="databasePlatform" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
</bean>
</property>
</bean>
그래서 수업을 연장하거나 변경할 필요가 없습니다.답변하기 전에 원래 HibernateJpaVendorAdapter의 원래 소스 코드를 읽어야 합니다.그 결과, 「데이터베이스 플랫폼」속성에 액세스 할 수 있게 되었습니다.
언급URL : https://stackoverflow.com/questions/1459265/hibernate-create-mysql-innodb-tables-instead-of-myisam
'programing' 카테고리의 다른 글
어떻게 하면 PHP 타입 힌트에서 "캐치 가능한 치명적인 오류"를 잡을 수 있을까요? (0) | 2022.09.05 |
---|---|
java 로그인 사용자 이름 (0) | 2022.09.05 |
REST - JSON을 사용한HTTP 포스트 멀티파트 (0) | 2022.09.05 |
열에서 고유한 값을 찾은 다음 정렬합니다. (0) | 2022.09.05 |
@유효한 주석으로 하위 개체 목록의 유효성을 검사하지 않습니다. (0) | 2022.09.05 |