2014-07-17 4 views
1

내가 사용하고있는 데이터베이스가 ASCII 제어 문자 (26 SUB 등)와 같은 일부 특수 문자를 일부 필드에 포함하고 있음을 알았습니다. 그들은 XML을 무효로 만들었 기 때문에 문제를 일으키고 있습니다. 나는 가능한 한 가장 투명한 방법으로 그것들을 걸러 내고 싶습니다.JPA 문자열에서 '잘못된'문자 제거

JPA에서 일부 필터를 활성화하면 데이터베이스에서 읽은 문자열 값을 처리하고 수동으로 필터링하지 않고 모든 텍스트 필드에 적용 할 수 있습니까?

엔터티에서 문자열 필드를 수동으로 변경할 때 removing invalid XML characters from a string in java에서 언급 한 필터를 적용하면 작동합니다.

+0

뭔가? http://www.mastertheboss.com/interceptors/listeners/jp-entity-listeners –

답변

3

라이프 사이클 리스너를 사용할 수 있습니다. 엔티티 내부 또는 자체 클래스에서 리스너 콜백 메소드를 정의 할 수 있습니다. 귀하의 경우에는 여러 엔터티에서 필터링이 필요할 것으로 보이기 때문에 리스너 클래스를 만들 것입니다. DB에서 오는 데이터를 필터링하려면 PostLoad 콜백을 사용할 수 있습니다.

public class StringFilter { 

    @PostLoad 
    public void filter(Object obj) { 
    // filterString 
    } 
} 

그런 다음 엔티티 리스너 클래스를 지정 :이 같은

@EntityListeners({StringFilter.class}) 
public class SomeEntity { 
... 
+1

당신의 솔루션은 generif'filter (Object obj) 메소드를 생성하고 리플렉션을 사용하여 모든 문자열 필드를 처리해야한다고 가정합니다. –

+0

당신 말이 맞아요. 리스너가 여러 클래스에 적용되면 해당 리스너의 공통 조상을 사용해야합니다. 따라서 Object를 사용해야하거나 클래스가 공통 인터페이스를 구현할 수 있습니다 (또는 공통 엔티티 조상에서 파생 됨). 그런 다음 리스너 내부의 인터페이스로 작업 할 수 있습니다. – kostja