오라클은 빈 문자열을 null로 처리합니다.Oracle은 빈 문자열을 null로 변환하지만 JPA는 이에 따라 엔티티 캐시를 업데이트하지 않습니다.
그러나 JPA의 캐싱으로 인해이 문제로 인해 문제가 발생합니다.
먼저 JPA (Toplink Essentials)를 사용하여 하나의 필드로 빈 문자열이있는 엔티티를 사용합니다. Oracle은이 값을 저장할 때이 값을 null로 변환합니다.
그러나 엔티티를 가져올 때 JPA는이 필드가 여전히 빈 문자열 인 캐시에서 해당 엔티티를 반환하는 것처럼 보입니다. JPA는 데이터베이스에 저장된 내용이 실제로는 null 값이라는 사실을 모르는 것처럼 보입니다.이 비 일관성은 문제를 일으 킵니다.
JPA 또는 응용 프로그램 서버 (Oracle AS) 구성 레벨에서이 문제점을 해결할 수있는 방법이 있습니까? 이것은 응용 프로그램 수준에서 수정하고 싶지 않은 (하지만 필요한 경우 수행 할 것임) 내용입니다.
사실 이러한 값은 데이터베이스에 null로 저장됩니다. – tputkonen
오케이 ... 결과가 DBNull인지 확인 했습니까? java가 null과 DBNull을 변경하기 때문에 – Gambrinus
무슨 뜻인지 모르겠지만 먼저 foo (빈 문자열) 필드가있는 엔티티를 유지합니다. 오라클은이를 null로 저장합니다. 그런 다음 foo가 null 값을 포함하는지 테스트하고, 그렇지 않으면 null이 아닌 다른 필드에 저장하려고 시도합니다. 나는 JPA가 id를 저장하는 것과 같은 방식으로 foo를 무효화하고 싶습니다. – tputkonen