2014-09-25 3 views
0

나는 Hibernate를 사용하는 smartgwt 프로젝트에서 일하고있다.Hibernate에서 엔터티 속성의 직렬화를 피하는 방법

저는 DataSource가있는 User 엔티티가 있으며, DataSource는 엔티티에 대해 알도록 구성되어 있습니다. 따라서 DataSource를 사용하여 클라이언트에서 사용자를로드 할 때마다 DataSource는 Hibernate를 사용하여 발견 한 Users 엔터티를 직렬화합니다. 제 문제는 클라이언트에있는 레코드에 암호 속성이 있다는 것입니다 ... 물론 암호는 절대로 클라이언트에 보내지 않아야합니다!

2 가지 해결책을 생각하고 있지만 지금까지 문제를 성공적으로 해결할 수 없습니다.

1 - 암호 속성을 직렬화하지 않도록 Hibernate 엔터티를 구성 할 수 있다고 생각하지만 어떻게 찾지 못했습니다.

2 - 또한 해당 필드를 무시하도록 DataSource를 구성 할 수 있어야하지만 방법은 알 수 없습니다.

@Transient 
private String password; 

마크 귀하의 @Transient 주석 필드 나 :

private transient String password; 

이 최대 절전 모드가 지속되거나 객체를 직렬화하거나 허용하지 않습니다

답변

1

는 작업을 수행하는 몇 가지 방법이 있습니다.

문제는 아마도 영속화되기 위해서는 암호가 필요하지만 읽을 때는 직렬화되지 않아야한다는 것입니다. 이 경우 암호가없고 다른 값을 복사하는 사용자의 새로운 POJO 엔터티를 만들거나 필요한 필드를 얻고 암호를 제외하기 위해 JPQL 쿼리를 작성하기 만하면됩니다.

+0

안녕하세요! 서버에서 속성을 필요로하기 때문에 일시적인 문제는 도움이되지 않지만 솔루션을 찾을 수있게되었습니다. 나는 당신이 클라이언트에서 사용하고자하는 프로퍼티만을 가지고있는 엔티티를 만들었습니다! – ius

0

나는 smartGWT로 작업하는 동안 제안합니다. 엔티티를 클라이언트 측에 보내면 안됩니다. DTO (Data Transfer Object)를 사용해야합니다. userDTO의 클라이언트에게 보낼 필드 만 유지하십시오. GWT 서블릿에서 데이터베이스의 엔터티를로드 한 다음 해당 DTO로 변환 한 다음 클라이언트에 보냅니다.

관련 문제