문제

Geronimo 응용 프로그램 서버에서 OpenJPA 구현과 함께 JPA를 사용하고 있습니다. 또한 MySQL 데이터베이스를 사용하고 있습니다. 날짜 속성으로 객체를 업데이트하는 데 문제가 있습니다. 엔티티를 날짜 속성과 병합하려고 할 때는 SQL 업데이트 스크립트가 생성되지 않습니다 (또는 다른 필드가 수정되면 SQL 업데이트 스크립트가 생성되지만 날짜 필드가 그로부터옵니다). 날짜 필드가 다른 널 값이 아닌 다른 값으로 설정되면 업데이트 스크립트가 올바르게 생성됩니다.

그런 문제가있는 사람이 있습니까?

도움이 되었습니까?

해결책

OpenJPA는 엔티티를 분리 (그리고 아마도 직렬화) 할 때 특정 가정을합니다.

일반적으로 이러한 종류의 문제를 시작하는 것은 직렬화입니다. 엔티티가 직렬화되면 OpenJPA가 STATEMANAGER를 잃어 버렸을 때 어떤 필드가로드되었는지 추적합니다. 결과적으로 엔티티를 NULL 값으로 다시 병합 할 때 OpenJPA는 필드가로드되었다고 확신하지 못하고 변경되지 않았다고 생각합니다.

이 문제를 해결하기위한 몇 가지 옵션이 있습니다.

Serializable Statemanager를 사용하도록 OpenJPA를 구성 할 수 있으며로드 한 필드를 추적합니다. 이렇게하려면 다음 속성을 Persistence.xml에 추가하십시오.

<property name="openjpa.DetachState" value="loaded(DetachedStateField=true)"/>

또는 OpenJPA에 엔티티가 분리되기 전에 필드 세트를로드하도록 지시하십시오. 그런 다음 OpenJPA는 어떤 필드가 존재했는지 알고 널 값을 올바르게 처리 할 것입니다. 옵션은 Fetch Group (OpenJPA 개념, 기본적으로 모든 비 게으른 필드를로드) 또는 모든 필드 (비용이 많이들 수 있음)를로드하는 것입니다.

대부분의 경우 Fetch Groups를 추천합니다. 여기에는 Persistence.xml의 속성이 있습니다.

<property name="openjpa.DetachState" value="fetch-groups"/>

당신이 너무 기울어 진 객체 그래프로 영리한 일을 할 수 있습니다. OpenJPA 매뉴얼에는 더 많은 정보가 있습니다 http://openjpa.apache.org/builds/1.2.2/apache-openjpa-1.2.2/docs/manual/manual.html#ref_guide_detach_graph

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