通过HQL将对象列表转换为另一种类型
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过HQL将对象列表转换为另一种类型相关的知识,希望对你有一定的参考价值。
我有下一个持久化为db的类。
class User {
private long id;
@AttributeOverride(name = "id", column = @Column(name = "role_id"))
@Embedded
@ElementCollection
private List<RoleId> roles;
}
class RoleId {
private String id;
}
我想得到这堂课的下一个投影。
class UserProjection {
private long id;
private List<String> roles;
}
其中List<String> roles
是用户的RoleId.id
的收集列表。为此,我编写了下一个HQL:
select new UserProjection(id, elements(roles)) from User where id = :id
当然,由于角色是RoleId对象,它不起作用。如何使用HQL将List<RoleId>
转换为List<String>
。可能吗?
UPD:
所以,我认为这是不可能的,或者几乎不可能。而不是这个我使用CriteriaAPI。
答案
你可以创建UserProjection
的构造函数,并在那里从List<RoleId>
转换为List<String>
。
select new ...UserProjection(u.id, u.roles) from User u join fetch u.roles where u.id = ?1
我想你甚至可以尝试解决你的任务,如here(未测试):
public interface UserProjection {
Long getId();
@Value("#{target.roles.stream().map(RoleId::getId).collect(T(java.util.stream.Collectors).toList())}")
List<String> getRoles();
}
然后在您的回购中使用此投影:
public interface UserRepo extends JpaRepository<User, Long> {
List<UserProjection> getById(long id);
}
(如果有效,请告诉我们..)
以上是关于通过HQL将对象列表转换为另一种类型的主要内容,如果未能解决你的问题,请参考以下文章
通过重新解释原始字节从一种类型的 numpy 数组转换为另一种类型