JPA存储库和带有varargs的构造函数

卡罗琳 :

可以在@Query(org.springframework.data.jpa.repository)中使用varargs的构造函数。我的意思是这样的课:

public class EntityDTO {

  public EntityDTO(Long id, LocalDate... dates) {
    // some code here where dates 
    //which are converted to List<Pair<LocalDate, LocalDate> datesList
  }
}

public interface CustomRepository extends JpaRepository<Entity, Long> {

  @Query("SELECT new package.path.EntityDTO(id, date1, date2, date2) FROM Entity")
  List<EntityDTO> findEntityList();
}

现在出现这样的错误:

Unsatisfied dependency expressed through constructor parameter 3
 Validation failed for query for method public abstract java.util.List CustomRepository.findEntityList(java.lang.Long,java.time.LocalDate,java.time.LocalDate)

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: 
 Unable to locate appropriate constructor on class [EntityDTO]. Expected arguments are: long, java.time.LocalDate, java.time.LocalDate, java.time.LocalDate, java.time.LocalDate

这只是查询示例,因为dto在构造函数中可以具有2到12-14之间的id和LocalDate参数,日期可以来自不同的表(实体)。这取决于查询。为此,我希望类更通用。查询比本示例中的要复杂得多,但是我对某种构造函数感兴趣,这使我有可能创建类似于我在EntityDTO构造函数中描述的内容。可以在@Query?中使用varargs

编辑:如果JPQL没有此功能,您有什么建议吗?

毛躁:

恐怕那是不可能的。

Hibernate实现匹配的构造函数解析的方式,只有具有与传递到构造函数表达式中的参数数量完全相同的参数数量的构造函数才被视为潜在匹配。

一种解决方法可能是创建一个接受列表的构造函数,然后修改您的查询沿着线的东西SELECT NEW EntityDTO(id, NEW list(date1, date2, date2))......如果只是嵌套NEW表达了支持。不幸的是,这是一个长期存在的功能要求

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

带有枚举列表的 Jpa 存储库

是在构造函数和使用存储库的服务中拥有多个服务的好方法吗?

带有bean验证的Spring JPA存储库:错误的响应

带有JPA存储库的Spring Boot static where子句

带有数据库名称参数的构造函数

为什么接口投影比带有Hibernate的Spring Data JPA中的构造函数投影和实体投影慢得多?

带有可选参数的Varargs函数

带有复制构造函数的 emplace 和 try_emplace

如何在Spring JPA存储库中使用构造函数映射

默认(用户定义)构造函数和带有默认参数的构造函数之间的区别?

复制构造函数和带有std :: any的构造函数之间的冲突

带有构造函数的 TestNG

带有发布和快照标签的Maven远程存储库

带有示例,规范和Pageable的Spring Boot存储库

带有CRLF和LF文件的Git存储库?

为什么ArrayList没有varargs构造函数?

Java构造函数,在属性前带有和不带有“ this”

如何使用带有 JoinColumn 的 JPA 实体的全参数构造函数?

带有构造函数和函数的类中有很多错误

正确的方法来设置带有LiveData的ViewModel和带有翻新的存储库

当bean具有varargs构造函数时,如何XML配置Spring bean进行构造函数注入

Lombok @Builder和JPA默认构造函数

带有构造函数和析构函数的VS2013外部解析

带有存储库,ManyToOne的Spring JPA标准,在联接表的字段中选择

使用带有可为空的外键的QueryDSL在Spring Data JPA存储库中进行过滤

带有.NET标准库的Xamarin.Android上的JsonSerializationException'无法找到构造函数'

生成带有TypeBuilder的构造函数的构造函数

没有合适的用户定义的转换,带有重载的构造函数和继承

具有自定义异常的方法/构造函数签名中带有和不带有throw()的C ++