Maria에서 Boolean을 사용하여 5.2 스키마 유효성 검사 오류 발생DB
저는 Spring JPA, Hibernate 5.2를 사용하여 Spring Boot 1.5 프로젝트를 만듭니다.스키마 설정을 만들었습니다.
spring.jpa.hibernate.ddl-auto: create
그런 다음 애플리케이션을 중지하고 다음 값으로 앱을 다시 시작했습니다.
spring.jpa.hibernate.ddl-auto: validate
저는 이런 콩을 가지고 있습니다.
@Entity
@Table(uniqueConstraints = { @UniqueConstraint(name = "account_username", columnNames = { "username" }) })
public class Account extends AbstractEntity implements CustomUserDetail {
@NotBlank
@Username
@Column(nullable = false/* , unique = true */)
private String username;
private String password;
private Instant lastPasswordUpdate;
@NotNull
@Column(nullable = false)
@Enumerated(EnumType.STRING)
private AccountType type = AccountType.USER;
@NotNull
@Column(nullable = false, columnDefinition = "BOOLEAN default true")
private boolean enabled = true;
@Audited
@Size(min = 1)
@Type(type = "json")
@Column(columnDefinition = "json")
private Roles[] roles = new Roles[] {};
생성된 테이블은 다음과 같습니다.
CREATE TABLE `account` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`createdBy` varchar(255) DEFAULT NULL,
`createdDate` datetime DEFAULT NULL,
`lastModifiedBy` varchar(255) DEFAULT NULL,
`lastModifiedDate` datetime DEFAULT NULL,
`sid` varchar(36) NOT NULL,
`version` bigint(20) NOT NULL,
`enabled` tinyint(1) NOT NULL DEFAULT '1',
`lastPasswordUpdate` datetime DEFAULT NULL,
`password` varchar(255) DEFAULT NULL,
`roles` json DEFAULT NULL,
`type` varchar(255) NOT NULL,
`username` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `account_username` (`username`),
UNIQUE KEY `UK_5fs2lcge9gnvs1seea2fwnwv5` (`sid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
애플리케이션을 시작할 때valitate옵션에 다음 오류가 표시됩니다.
Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: wrong column type encountered in column [enabled] in table [`Account`]; found [bit (Types#BIT)], but expecting [boolean default true (Types#BOOLEAN)]
at org.hibernate.tool.schema.internal.AbstractSchemaValidator.validateColumnType(AbstractSchemaValidator.java:159) ~[hibernate-core-5.2.12.Final.jar:5.2.12.Final]
at org.hibernate.tool.schema.internal.AbstractSchemaValidator.validateTable(AbstractSchemaValidator.java:143) ~[hibernate-core-5.2.12.Final.jar:5.2.12.Final]
at org.hibernate.tool.schema.internal.GroupedSchemaValidatorImpl.validateTables(GroupedSchemaValidatorImpl.java:42) ~[hibernate-core-5.2.12.Final.jar:5.2.12.Final]
at org.hibernate.tool.schema.internal.AbstractSchemaValidator.performValidation(AbstractSchemaValidator.java:89) ~[hibernate-core-5.2.12.Final.jar:5.2.12.Final]
at org.hibernate.tool.schema.internal.AbstractSchemaValidator.doValidation(AbstractSchemaValidator.java:68) ~[hibernate-core-5.2.12.Final.jar:5.2.12.Final]
at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:191) ~[hibernate-core-5.2.12.Final.jar:5.2.12.Final]
at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:72) ~[hibernate-core-5.2.12.Final.jar:5.2.12.Final]
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:313) ~[hibernate-core-5.2.12.Final.jar:5.2.12.Final]
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:452) ~[hibernate-core-5.2.12.Final.jar:5.2.12.Final]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:889) ~[hibernate-core-5.2.12.Final.jar:5.2.12.Final]
원래 스키마가 같은 정확한 구성으로 만들어졌으니 상당히 이상합니다.
다음 연결 속성을 사용했으며 Windows에서 MariaDB 10.2.13을 사용하고 있습니다.
spring.datasource.url=jdbc:mysql://localhost:3310/rebus?useLegacyDatetimeCode=false&serverTimezone=UTC&tinyInt1isBit=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDBDialect (with MariaDB53Dialect it's the same)
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
(옵션으로) 동일한 구성을 시도했습니다.transformedBitIsBoolean) 및 Mysql 5.7의 드라이버와 방언은 문제가 없습니다.
내가 뭘 잘못하고 있나요?어떻게 하면 맞춤형으로 모델을 더럽히고 지금처럼 깨끗하게 유지하지 않고 문제를 해결할 수 있을까요?
======= 업데이트 ============
하이버네이트에 대한 조사 및 디버깅AbstractSchemaValidator, 이것이 문제를 일으키고 있는 줄입니다.
boolean typesMatch = column.getSqlTypeCode( metadata ) == columnInformation.getTypeCode()
|| column.getSqlType( dialect, metadata ).toLowerCase(Locale.ROOT).startsWith( columnInformation.getTypeName().toLowerCase(Locale.ROOT) );
다음에서 탐지된 유형column.getSqlTypeCode( metadata )16이고, 대신에 타자를 쳐라.columnInformation.getTypeCode()-7. Mysql을 사용할 때 타입은 양쪽 모두 16입니다.
언급URL : https://stackoverflow.com/questions/49325483/hibernate-5-2-schema-validation-error-with-boolean-in-mariadb
'programing' 카테고리의 다른 글
| Wordpress 업로더를 통해 미디어를 업로드할 수 없습니다. (0) | 2023.10.04 |
|---|---|
| X-Frame-Options: SAMEORIGIN HTTP 헤더를 바이패스하려면 어떻게 해야 합니까? (0) | 2023.10.04 |
| T-SQL에서 ";"와 "GO"의 차이점은 무엇입니까? (0) | 2023.10.04 |
| base64 인코딩된 문자열에 공백이 포함될 수 있습니까? (0) | 2023.10.04 |
| Windows 10의 PowerShell에서 파일 하드링크를 만들려면 어떻게 해야 합니까? (0) | 2023.09.24 |