【问题标题】:How to Define Dynamic Model in Spring Framework如何在 Spring Framework 中定义动态模型
【发布时间】:2017-07-03 05:43:15
【问题描述】:

我使用 Spring Framework 作为我的后端

我已经定义了实体类实体类知道包含5个字段

下面是类,下面的代码没有setter getter部分以使更短更干净

@Entity
@Table(name="TblKnow")
public class Know {

    @Id 
    private Double idKnow;
    private String SubjectKnow;
    private String BodyKnow;
    private String ImgKnow;
    private double CountView;

JpaRepository 界面我只想查询两列而不是所有列。

public interface KnowRepository extends JpaRepository<Know,Double> {



     @Query("SELECT idKnow,SubjectKnow FROM Know")
     public Page<Know> findCByOrderByIdKnowDesc(Pageable pageable);

问题:我尝试运行,但出现异常

java.lang.IllegalArgumentException:无法使用请求的结果类型 [java.lang.Long] 为具有多个返回的查询创建 TypedQuery

但是如果我不使用下面的查询就可以了

 public Page<Know> findAllByOrderByIdKnowDesc(Pageable pageable);

【问题讨论】:

    标签: spring spring-boot spring-data


    【解决方案1】:

    您可以创建一个自定义构造函数并使用它来仅选择 JPA 查询中的某些字段。

    public Know(Double idKnow, String SubjectKnow) {
        this.idKnow = idKnow;
        this.SubjectKnow = SubjectKnow;
    }
    

    并且在 JPA 查询中使用这个构造函数。确保使用包的完整路径。

    @Query("SELECT NEW packagePath.Know(idKnow,SubjectKnow) FROM Know")
    

    【讨论】:

      【解决方案2】:

      查询:

      public Page<Know> findAllByOrderByIdKnowDesc(Pageable pageable);
      

      由您选择具有正确映射到 Know 类中的字段的 Know 对象(并在包装到 Page 之后)。

      有查询:

       @Query("SELECT idKnow,SubjectKnow FROM Know")
       public Page<Know> findCByOrderByIdKnowDesc(Pageable pageable);
      

      返回一些 spring 数据无法以正确方式映射到 Know 类的自定义 bean/对象(正如您将其声明为包装到 Page 中的预期返回类)。使用 idKnow,SubjectKnow 字段将 counstructor 添加到 Know 中,或者您可以使用 idKnow,SubjectKnow 字段将其包装到一些 DTO 中。

      【讨论】:

        猜你喜欢
        • 2014-04-16
        • 1970-01-01
        • 2021-11-27
        • 1970-01-01
        • 2015-04-29
        • 1970-01-01
        • 2015-06-19
        • 2018-05-18
        • 2021-02-27
        相关资源
        最近更新 更多