code

Hibernate가 LONG over CLOB를 사용하도록 전환된 이유는 무엇입니까?

starcafe 2023. 8. 26. 12:01
반응형

Hibernate가 LONG over CLOB를 사용하도록 전환된 이유는 무엇입니까?

Hibernate가 사용하기 시작한 것 같습니다.LONG버전 3.5.5(3.2.7에서 업그레이드됨)의 데이터 유형이 아닌CLOB의 목적으로type="text".

이로 인해 다음과 같은 문제가 발생하고 있습니다.LONGOracle의 데이터 유형은 오래된 데이터 유형입니다(http://www.orafaq.com/wiki/LONG) 참조). 테이블에는 다음과 같은 열이 둘 이상 있을 수 없습니다.LONG데이터 형식으로.

이것이 왜 바뀌었는지 아는 사람?

나는 오라클을 설정하려고 노력했습니다.SetBigStringTryClob속성을 true로 설정합니다(Hibernate > CLOB > Oracle :(). 하지만 데이터 유형 매핑에는 영향을 주지 않고 내 경우와 무관한 데이터 전송 내부에만 영향을 줍니다.

이에 대한 한 가지 가능한 해결책은 다음과 같습니다.org.hibernate.dialect.Oracle9iDialect:

public class Oracle9iDialectFix extends Oracle9iDialect {
  public Oracle9iDialectFix() {
    super();
    registerColumnType(Types.LONGVARCHAR, "clob");
    registerColumnType(Types.LONGNVARCHAR, "clob");
  }
}

하지만 이것이 마지막 수단입니다. 이 클래스를 무시하는 것은 내가 차라리 피하고 싶은 최대 절전 모드에 한 걸음 더 다가가는 것입니다.

누가 이것이 왜 일어났는지 설명할 수 있습니까?이것을 벌레로 키워야 합니까?

[업데이트]:제가 https://hibernate.atlassian.net/browse/HHH-5569, 을 만들었습니다. 어떻게 되는지 봅시다.

이 문제의 해결책은 다음과 같습니다.materialized_clob적어도 그것은 HHH-5569에서 게일 배드너가 말하고 있는 것입니다.

이것은 저에게 전혀 도움이 되지 않지만(그리고 저는 그것에 대한 관련 의견을 남겼습니다), 여기 있는 다른 사람에게 도움이 될 수도 있습니다.어쨌든 버그는 거부되었고 제가 할 수 있는 것은 거의 없지만 오버라이드된 사투리를 사용합니다 :(

누가 이것이 왜 일어났는지 설명할 수 있습니까?이것을 벌레로 키워야 합니까?

HHH-3892 - SQL LONGVARCHARCLOB에서 Java String, SQL LONGVARB로의 매핑 지원 개선INARYBLOB에서 Java 바이트 [](문서 업데이트는 HHH-4878에 의해 추적됨).

그리고 같은 문제에 따르면, 예전의 행동은 잘못된 것이었습니다.

(참고: 현재 org.hibernate.type.TextType이 "텍스트"를 java.sql에 잘못 매핑합니다.Types.CLOB. 이 문제는 이 문제로 해결되고 데이터베이스 방언으로 업데이트됩니다.)

당신은 항상 문제를 제기할 수 있지만, 간단히 말해서, 제가 이해하는 바는 당신이 사용해야 한다는 것입니다.type="clob"속성을 에 매핑하려면CLOB.

PS: 사용자 고유의 기능 제공Dialect또한 Hibernate 구성(포크와 무관)으로 선언하는 것은 장기적으로 IMHO 솔루션이 아닙니다.

이유에 대한 당신의 질문에 대답할 수 없지만, Hibernate 6의 경우 다시 사용하는 것을 고려하고 있는 같습니다.

언급URL : https://stackoverflow.com/questions/3719905/why-has-hibernate-switched-to-use-long-over-clob

반응형