通过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>

查询应该是另一个(请参阅herehere):

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将对象列表转换为另一种类型的主要内容,如果未能解决你的问题,请参考以下文章

我可以在 Java 中将布尔值转换为另一种数据类型吗

通过重新解释原始字节从一种类型的 numpy 数组转换为另一种类型

将迭代器强制转换为另一种类型

如何将字符串类型的日期转换为另一种日期格式。 |颤振 |飞镖[重复]

如何将我的类隐式转换为另一种类型?

将 json 转换/映射为另一种格式