작은 int를 부울 최대 절전 모드로 매핑
MySQL 테이블(TINYINT(1))에 부울 유형이 있으며 엔티티에 부울 필드를 매핑하려고 하지만 예외가 발생합니다.
org.hibernate.HibernateException: Wrong column type in maegul.users for column admin. Found: bit, expected: boolean
엔터티의 필드를 바이트로 변경하고 각각의 변경 사항을 변경하여 부울을 작동하면 다음과 같은 결과를 얻을 수 있습니다.
org.hibernate.HibernateException: Wrong column type in maegul.users for column admin. Found: bit, expected: tinyint
사용해 보았습니다.@Type
필드의 주석:
@Type(type = "org.hibernate.type.NumericBooleanType")
하지만 이해가 갑니다.
org.hibernate.HibernateException: Wrong column type in maegul.users for column admin. Found: bit, expected: integer
제가 여기서 읽은 바로는:
오르간 hibern동면예외:maegul.user에서 컬럼 관리자에 대한 컬럼 유형이 잘못되었습니다.발견: 비트, 예상: 정수
하이버네이트가 정수를 기대하고 있는 것 같습니다.
이는 주석이 이제 정확하다는 것을 의미합니다.
@Type(type = "org.hibernate.type.NumericBooleanType")
하지만 아마도 당신의 데이터베이스가 정수가 아닌 비트로 설정되도록 업데이트되어 오류가 발생했을 것입니다.
TinyInt가 꼭 필요하다면, 사용할 수 있습니다.@Type
그리고.@Column
, 타이니 유형의 정수로 설정합니다.Int :
@Column(columnDefinition = "TINYINT")
@Type(type = "org.hibernate.type.NumericBooleanType")
public boolean admin = true;
더 나은 사용법BIT(1)
대신에TINYINT(1)
@Column(nullable = false, columnDefinition = "BIT", length = 1)
private boolean flag = false;
모든 장소에서 지루한 색상 수준 주석을 필요로 하지 않는 방언에서 수행할 수 있습니다.
import org.hibernate.Hibernate;
import org.hibernate.dialect.PostgreSQLDialect;
import java.sql.Types;
public class PostgresCustomConversionDialect extends PostgreSQLDialect {
public PostgresCustomConversionDialect() {
super();
this.registerColumnType( Types.BIT, "numeric(1, 0)" );
this.registerColumnType( Types.BOOLEAN, "numeric(1, 0)" );
}
public String toBooleanValueString(boolean bool) {
return bool ? "1" : "0";
}
}
그런 다음 이 사용자 지정 방언을 "hibernate.dialct"의 포스트그레스 방언으로 사용합니다.
시도해 보기:
<property name="isPaymentReceived" type="java.lang.Boolean">
<column name="IS_PAYMENT_RECEIVED" sql-type="tinyint"/>
</property>
MySQL 연결 문자열에 "transformedBitIsBoolean=true"를 추가하여 이 문제를 해결할 수 있었습니다.
Hibernate 4 업그레이드 후 "Found: bit, expected: boolean" 질문을 참조하십시오.
그리고 이 포럼 게시물: https://hibernate.atlassian.net/browse/HHH-6935
int로 매핑하고 accessor(isAdmin)를 사용하여 부울 값을 가져오는 것이 문제입니까?어쨌든 진짜 형을 가리고 있기를 바랍니다.
org.hibernate.type으로 매핑합니다.BooleanType이 작동할 수 있습니다.
http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/types.html#types-value-basic 를 참조하십시오.
오늘 동면 상태와 비슷한 상황을 겪었고 결국 mysql data type을 tinyint(1)로 하고 boolean type을 선언했고 속임수를 썼습니다.
@Type 주석은 JPA에서 사용할 최대 절전 모드 주석이며, ColumnDefiniton Attribute를 사용할 수 있습니다.
@Column(nullable = false, columnDefinition = "TINYINT(1)")
private boolean isTrue;
이거 먹어봐요.
열을 비트(1)로 정의
CREATE TABLE test_table (bool_column BIT(1));
도면요소 속성을 부울로 정의
속성을 이렇게 매핑합니다.
@Column(name = "bool_column", columnDefinition = "BIT")
public boolean boolField;
저는 이 방법이 더 간단하다고 생각하고 추가로 당신은 jpa 표준을 고수합니다.
I have this working with MySQL and Hibernate 5.언급URL : https://stackoverflow.com/questions/8038939/map-a-tinyint-as-boolean-hibernate
'prosource' 카테고리의 다른 글
C# ODP.NET 파일 또는 어셈블리 로드 (0) | 2023.10.10 |
---|---|
MariaDB는 'view' 테이블에서 datetime 필드로 필터링할 때 빈 집합을 반환하는 반면 MySQL(및 base view sql)은 정상적으로 작동합니다. (0) | 2023.10.10 |
HikariCP pass Oracle 사용자 지정 유형 (0) | 2023.10.05 |
데이터베이스 정상 양식이란 무엇이며 예를 들어 줄 수 있습니까? (0) | 2023.10.05 |
Angular 5는 일부 클래스에서 'ng-star-inserted'를 추가합니다. - 그게 뭐죠? (0) | 2023.10.05 |