如何在JPA实体中创建非持久字段?

时间:2017-11-13 13:35:37

标签: java jpa spring-boot spring-data-jpa

我有一个名为Users的实体,其登录名,部门作为存储在Users表中的字段。

我的Spring-Boot配置定义了为此应用程序中的用户提供系统管理员角色的部门。

关键问题是我希望登录end-point返回用户数据以及他/她是或不是系统管理员的其他信息。

我认为这些信息应该在User类中,但是我不希望这些信息与其他字段一起存储在数据库中,因为管理部门可能会更改,或者用户将我从一个部门更改为另一个部门不管理系统。

编辑)当用户请求login()时,我将定义此 IsManager 字段:我将获得用户的department字段并检查{{1}将列表设置为true ou false。

所以问题是将信息放在实体类的非持久字段中(以及如何做)是否正确,或者我是否可以在rest方法中更改ResponseEntity以添加其他信息(和怎么样??

2 个答案:

答案 0 :(得分:8)

简短回答是使用 @Transient 注释。 正确的答案是将UserEntity和UserDto分成两个不同的类,并使用MapStruct进行转换。

答案 1 :(得分:2)

嗯,这似乎是一个偏好/意见的问题,希望仍然没有因此而关闭。

添加@Transient字段不会造成任何损害,但我仍然希望避免像这样更改@Entities

因此,在一个非常类似的情况下,我决定创建一个包含Response的包装器User类,以及像系统管理员角色这样的“间接角色”。 / p>

主要是因为我在一个单独的项目/ jar中有所有实体类,然后在各种客户端和/或服务。然后在@Entity中添加任何内容之前,我会分析是否有任何其他相关代码需要这些内容,或者它是否仅与此服务相关,例如。

如果添加仅与此特定服务/客户有关,我不想将其添加到@Entity并使其“更复杂”,因为这只是服务需求。

所以我认为我的答案包含在前一段中。