prosource

작은 int를 부울 최대 절전 모드로 매핑

probook 2023. 10. 5. 23:24
반응형

작은 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

반응형