我使用 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);
答案 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中。