2014-09-25 98 views
0

我正在使用Hibernate的smartgwt项目中工作。如何避免Hibernate中的实体属性序列化

我有一个用户实体与他的数据源和数据源被配置为了解实体。因此,无论何时我使用DataSource在客户端加载用户,DataSource都使用Hibernate来序列化他创建的用户实体。 我的问题是,我在客户端获得的记录有一个密码属性...当然,密码永远不应该发送到客户端!

我在考虑2个解决方案,但直到现在我无法成功解决我的问题。

1 - 我想这将是可能的配置Hibernate实体不序列化密码属性,但我没有找到如何。

2 - 我也猜测,必须有可能配置数据源忽略该字段,但不知道如何。

回答

1

有几个方式做到这一点:

@Transient 
private String password; 

标记您与@Transient注释或现场:

private transient String password; 

这些不会让休眠要么持续存在或序列化对象。

问题是,您可能需要密码才能在读取时持久保存但不能序列化。在这种情况下,我会创建一个新的用户POJO实体,它没有密码并将其他值复制到它,或者只是简单地写JPQL查询来获取必要的字段并排除密码。

+0

嗨!正如你所说,暂时的东西不会帮助我,因为我需要在服务器中的属性,但你让我找到解决方案。我只是用我想在客户端使用的属性创建你所说的实体! – ius 2014-09-26 09:02:58

0

我建议与smartGWT合作。你不应该发送实体到客户端。你应该使用DTO(数据传输对象)。只保留要发送给客户端的userDTO中的那些字段。在GWT Servlet中,从数据库加载实体,然后转换为相应的DTO,然后发送给客户端。