HQL - 将对象列表传递给自定义查询方法

时间:2017-12-03 16:20:22

标签: java spring hibernate jpa spring-boot

我想使用自定义查询从db获取一些数据。

   @Query("select new com.myProject.UserConfDTO(cd.id, us.lastDeactivationTime, true) from UserConfig us " +
            "join us.codes as cd where cd in :codes and us.userEnabled = 1 and us.state= 'ACTIVE'")
    List<UserConfDTO> getAllEnabledUsersWithConf(@Param("codes") List<Codes> codes);

Codes.java:

    @AllArgsConstructor
public class Codes{
    private  Integer id;
    private  String name;
    }

UserConfDTO.java:

@AllArgsConstructor
public class UserConfDTO{
    private  Integer id;
    private  String name;
    private  Instant lastDeactivationTime;
    private  Boolean userEnabled;
}

UserConfig.java:

@Id
@GeneratedValue
private Long id;
@ElementCollection
@Builder.Default
private Set<Integer> codes = new HashSet<>();

private Instant lastDeactivationTime;
@Column(nullable = false)
private State state;

我想传递所有的代码对象 - 检查db中的一些东西,并返回准备好的UserConfDT对象。不幸的是,它不起作用。我得到例外:

IllegalArgumentException: Parameter value element [Codes(id=1234, name=test1)] did not match expected type [java.lang.Integer (n/a)]

我有UserConfig类/表,其中包含一对多的类/表代码。一个UserConfig可以有多个代码。 我想将List作为参数传递并从UserConfig数据中获取(通过每个代码ID属性) - &gt;接下来创建via(select new ..)UserConfDTO对象。

你知道怎么做吗?

0 个答案:

没有答案