문제

두 테이블 사이에 일대다 관계가 있습니다.Many 테이블에는 clob 열이 포함되어 있습니다.clob 열은 최대 절전 모드에서 다음과 같습니다.

@CollectionOfElements(fetch = EAGER)
@JoinTable(name = NOTE_JOIN_TABLE, joinColumns = @JoinColumn(name = "note"))
@Column(name = "substitution")
@IndexColumn(name = "listIndex", base = 0)
@Lob
private List<String> substitutions;

따라서 기본적으로 몇 가지 대체 사항이 포함된 메모가 있을 수 있습니다. "foo" 그리고 "fizzbuzz".따라서 내 메인 테이블에는 ID가 4인 메모가 있을 수 있고 NOTE_JOIN_TABLE 나는 두 개의 행을 가질 것입니다. "foo" 그리고 "fizzbuzz" 둘 다 노트와 관계가 있습니다.

그러나 이들 중 하나가 DB에 삽입되면 더 큰 대체 값은 가장 짧은 값만큼 잘립니다. 그래서 이 경우에 나는 "foo" 그리고 "fiz" 대신 DB에 "foo" 그리고 "fizzbuzz".

왜 이런 일이 일어나는지 아시나요?우리 코드의 어느 곳에서도 잘리지 않는지 확인하고 확인했습니다. 확실히 최대 절전 모드입니다.

도움이 되었습니까?

해결책

많은 JDBC 드라이버, 특히 초기 Oracle 버전에서는 LOB를 삽입하는 동안 문제가 발생합니다.동일한 매개변수 바인딩을 사용하여 Hibernate 쿼리가 실행되고 JDBC 드라이버에서 성공적으로 작동하는지 확인하셨나요?

다른 팁

LOB/CLOB 열이 충분히 크지 않을 수 있습니다.Hibernate에는 다음을 위한 몇 가지 기본 열 크기가 있습니다. LOB/CLOB 상대적으로 작습니다(db에 따라 달라질 수 있음).어쨌든 다음과 같이 시도해 보십시오.

@Lob 
@Column(length=2147483648)

필요에 따라 길이(바이트)를 조정하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top