Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java spring jpa可分页排序属性引用异常_Java_Spring_Hibernate_Spring Mvc_Spring Data Jpa - Fatal编程技术网

Java spring jpa可分页排序属性引用异常

Java spring jpa可分页排序属性引用异常,java,spring,hibernate,spring-mvc,spring-data-jpa,Java,Spring,Hibernate,Spring Mvc,Spring Data Jpa,我有一个SpringBoot项目,我使用SpringJPA。我有这个型号的收据,它有一列交易日期,它的数据库列名是交易日期。我正在调用findAll(谓词谓词,Pageable-Pageable)以获得所需的数据页 当我在我的ReceiptService中使用BooleanBuilder创建谓词,并使用PageRequest传递谓词而不进行排序时,它可以完全正常工作,但当我向其添加排序时,它将抛出以下异常: org.springframework.data.mapping.PropertyRef

我有一个SpringBoot项目,我使用SpringJPA。我有这个型号的
收据
,它有一列
交易日期
,它的数据库列名是
交易日期
。我正在调用
findAll(谓词谓词,Pageable-Pageable)
以获得所需的数据页

当我在我的ReceiptService中使用
BooleanBuilder
创建谓词,并使用
PageRequest
传递谓词而不进行排序时,它可以完全正常工作,但当我向其添加排序时,它将抛出以下异常:

org.springframework.data.mapping.PropertyReferenceException:找不到类型收据的属性事务

这就是我创建页面请求的方式

org.springframework.data.domain.Pageable pageable = new PageRequest(
        0, 
        10,
        Direction.DESC,
        "transaction_date");
这就是我在调试模式下查看分页时的样子

Page request [number: 0, size 10, sort: transaction_date: DESC]
但是,从例外情况来看,它似乎是从

这是我的存储库函数:(由于条件来自一个搜索框,该搜索框可能有其他一些字段为null或有值,因此我意识到使用谓词很容易做到这一点)


嗯,如果我理解你的问题,你想对所有数据进行排序,然后分页,对吗

您可以使用方法命名

Page<Receipt> findAllByOrderByTransactionDateDesc(Pageable pageable); 

不确定这是否是正确的方法,但它现在解决了我的问题

因此,我只是将实体中的
TransactionDate
更改为
TransactionDate
,然后在querydsl自动生成的Q模型中也更改了相同的列(我将这些类复制粘贴到我的模型包中,以便轻松控制它们),现在如果我将排序列作为“TransactionDate”传递,它就可以正常工作

我在几天内都不会将此标记为答案,因此可能有人会想出解决此问题的正确方法,但只是为了解决可能存在相同问题的人。

好吧,JPA通常(除了强制执行本机SQL命令时)希望收到java属性名,在本例中,TransactionDate,而不是真实的数据库列名transaction\u date

因此,要修复代码,基本上,您只需进行如下调用:

org.springframework.data.domain.Pageable pageable = new PageRequest(
    0, 
    10,
    Direction.DESC,
    "TransactionDate");

也就是说,java命名约定规定属性和变量应该是小写的,您可以查看

我不确定JPA(在本例中是spring数据)是否也希望您遵循命名约定。因此,如果只是按照我告诉您的那样传递名称,但不起作用,您可能需要将您的实体更改为:

@Entity
public class Receipt extends Base {

    @Column(name="email")
    private String email;

    @Column(name="bsid")
    private String bsid;


    @Column(name="snap_shot")
    private String snapShot;

    @Column(name="transaction_date")
    private Date transactionDate;

    @Column(name="reference_number")
    private String referenceNumber;

    @Column(name="total_amount")
    private Double totalAmount;

    @Column(name="submitted_by_user")
    private boolean submittedByUser;

    @Column(name="approval_date")
    private Date approvalDate;

    @ManyToOne
    @JoinColumn(name="user_id")
    private User user;

    @ManyToOne
    @JoinColumn(name="store_id")
    private Store store;

    @Column(name="pending")
    private boolean pending;

    @Column(name="declined")
    private boolean declined;

    @Column(name="approved")
    private boolean approved;

    // getters, setters, equals, hashcode, tostring, ...
}
然后,你的电话应该是这样的:

org.springframework.data.domain.Pageable pageable = new PageRequest(
    0, 
    10,
    Direction.DESC,
    "transactionDate");

干杯,Nikolas

如果在页面中使用字段名“TransactionDate”,会发生什么?@pDer666然后显示
org.springframework.data.mapping.PropertyReferenceException:找不到类型收据的属性TransactionDate保罗谢谢你的回复。我忘了提到我也在向函数传递谓词,因为我有一个动态查询。它基本上来自一个搜索框,其中可能有一些条件为null,所以我使用谓词(更新了我的问题)。我正要发布,引用必须是变量的名称,而不是列的名称。
Page page = myRepo.findAllByOrderByTransactionDateDesc(new PageRequest(page, size));

Page page = myRepo.findAllQuery(new PageRequest(page, size));
org.springframework.data.domain.Pageable pageable = new PageRequest(
    0, 
    10,
    Direction.DESC,
    "TransactionDate");
@Entity
public class Receipt extends Base {

    @Column(name="email")
    private String email;

    @Column(name="bsid")
    private String bsid;


    @Column(name="snap_shot")
    private String snapShot;

    @Column(name="transaction_date")
    private Date transactionDate;

    @Column(name="reference_number")
    private String referenceNumber;

    @Column(name="total_amount")
    private Double totalAmount;

    @Column(name="submitted_by_user")
    private boolean submittedByUser;

    @Column(name="approval_date")
    private Date approvalDate;

    @ManyToOne
    @JoinColumn(name="user_id")
    private User user;

    @ManyToOne
    @JoinColumn(name="store_id")
    private Store store;

    @Column(name="pending")
    private boolean pending;

    @Column(name="declined")
    private boolean declined;

    @Column(name="approved")
    private boolean approved;

    // getters, setters, equals, hashcode, tostring, ...
}
org.springframework.data.domain.Pageable pageable = new PageRequest(
    0, 
    10,
    Direction.DESC,
    "transactionDate");