최대 절전 모드 4 업그레이드 후 "찾았습니다: 비트, 예상: 부울"
Hibernate 3.6.5에서 4.0으로 업그레이드하려고 합니다(그리고 Hibernate 4 지원에 필요한 Spring 3.0.5에서 3.1로 업그레이드하려고 합니다.
MySQL과 HSQL 모두에서 지속적인 부울 필드와 관련된 문제가 발생했습니다.
Caused by: org.hibernate.HibernateException:
Wrong column type in PUBLIC.PUBLIC.EVENT for column Checked. Found: bit, expected: boolean
at org.hibernate.mapping.Table.validateColumns(Table.java:282)
at org.hibernate.cfg.Configuration.validateSchema(Configuration.java:1268)
at org.hibernate.tool.hbm2ddl.SchemaValidator.validate(SchemaValidator.java:155)
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:453)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1737)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1775)
at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:184)
at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:314)
JPA 및 주석은 도메인 개체에 사용되며 문제가 있는 필드는 다음과 같습니다.
@Column(name = "Checked")
private boolean checked;
HSQL 스키마:
Checked bit default 0 not null,
MySQL 스키마:
`Checked` tinyint(1) NOT NULL default '0',
Hibernate 4를 고수하면서 이를 해결하는 가장 간단한 방법은?데이터베이스 스키마, 최대 절전 모드 구성 또는 도메인 클래스 주석을 변경해야 합니까?
코드와 구성이 이전에 완전히 "정확했는지"는 모르겠지만, 적어도 하이버네이트 3에서는 잘 작동했습니다.
제가 여기에 추가해서 해결한 겁니다.columnDefinition = "BIT"
@Column 행으로 이동합니다.
@Basic
@Column(name = "B", columnDefinition = "BIT", length = 1)
public boolean isB() {
return b;
}
DB에서도 'BIT(1)'로 정의되어 있습니다.TINYINT와 함께 작업했습니다.변경 사항이 매우 경미하고 DB를 터치할 필요가 없기 때문에 제가 찾은 가장 쉬운 해결책입니다.
사용 방법: MySQL Server 5.5.13, 최대 절전 모드 4.1.1, JDK 1.6
저도 같은 문제가 있었고, mysql이 boolean을 bit의 별칭으로 취급하는 것을 고려하여 방언을 확장했습니다.
public class Mysql5BitBooleanDialect extends MySQL5Dialect{
public Mysql5BitBooleanDialect() {
super();
registerColumnType( java.sql.Types.BOOLEAN, "bit" );
}
}
더 긴 비트() 필드(예: 바이트[])를 사용하지 않기 때문에 이 필드가 끊어질 수 있습니다.
저는 이 문제를 다음과 같이 추가하여 해결할 수 있었습니다.transformedBitIsBoolean=true
MySQL 연결 문자열로 이동합니다.여기 참조: https://hibernate.atlassian.net/browse/HHH-6935
이에 대한 답변은 다음과 같습니다.
비트 또는 char 대신 Boolean용 JPA, MySQL 및 TinyInt(1) 최대 절전 모드
HSQL DB를 동시에 사용하기 때문에 문제가 조금 더 복잡해질 수 있지만, 어쨌든 보고 시도해 볼 수 있습니다!
내가 오르간.하이버네이트도 받은 문제를 발견했습니다.동면예외:잘못된 열 유형...발견: 비트, 예상: 부울
동면 4의 BooleanType에서 Ctor를 다음으로 변경했습니다.
public BooleanType() {
this( org.hibernate.type.descriptor.sql.BooleanTypeDescriptor.INSTANCE, BooleanTypeDescriptor.INSTANCE );
}
구본이 아닌
public BooleanType() {
this( BitTypeDescriptor.INSTANCE, BooleanTypeDescriptor.INSTANCE );
}
언급URL : https://stackoverflow.com/questions/8667965/found-bit-expected-boolean-after-hibernate-4-upgrade
'programing' 카테고리의 다른 글
여러 번의 패스를 통해 핵심 데이터 마이그레이션에 대한 예 또는 설명? (0) | 2023.10.12 |
---|---|
메뉴가 여러 개일 때 li의 메뉴에 페이지 ID가 손실됨 (0) | 2023.10.07 |
MariaDB: 단일 미러 DB와 다중 로컬 DB를 가진 슬레이브 (0) | 2023.10.07 |
다중 인수를 tong-click 메서드에 전달 (0) | 2023.10.07 |
C: 2차원 배열 크기 (0) | 2023.10.07 |