如何在Spring框架中定义动态模型

时间:2017-07-03 05:43:16

标签: spring spring-boot spring-data

我使用 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);

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

查询:

public Page<Know> findAllByOrderByIdKnowDesc(Pageable pageable);

为你工作,选择知道具有正确映射到知道类的字段的对象(以及包装到页面后)。

查询:

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

返回一些客户bean /对象,spring数据可以正确地映射到Know类(因为你声明它是包含在Page中的预期返回类)。使用idKnow,SubjectKnow字段将counstructor添加到Know中,或者可以使用idKnow,SubjectKnow字段将其包装到某个DTO中。