【发布时间】:2015-03-26 03:27:08
【问题描述】:
我有一个类 User 定义为
@Entity
@Table(name = "users")
@JsonIdentityInfo(generator = ObjectIdGenerators.UUIDGenerator.class, property = "jsonUUID")
public class User implements Serializable, UserDetails
{
private static final long serialVersionUID = -7035881497059422985L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
protected Long id;
protected String firstname;
protected String lastname;
protected String username;
protected ProfessionalCategory professional;
protected String companyName;
@Email
protected String email;
protected String password;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable
(
name = "role_user",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "role_id")
)
protected Set<Role> roles;
}
当我对/users/{id} 执行 GET 请求时,我希望 Hibernate 从用户中的所有字段中获取值并返回“完整”对象。但是当我对/users/ 执行GET 请求时,我想返回一个仅包含firstname 和lastname 的用户列表。我不仅希望 Jackson 在序列化期间忽略某些字段,我还希望 Hibernate 不获取它不需要的数据(因为获取每个用户的所有角色可能非常昂贵,因为我使用了 join表)。
我知道我可以编写自己的 SQL 查询,但是我会失去使用 Hibernate 的好处。那么有没有一种优雅的方法来解决这个问题?
【问题讨论】:
-
你不能把你的角色设置为延迟加载吗?
标签: java sql spring hibernate orm