Java 使用SpringDataJPA从1个表中按列查找,并从另一个表中按列排序

Java 使用SpringDataJPA从1个表中按列查找,并从另一个表中按列排序,java,spring-data-jpa,crud,Java,Spring Data Jpa,Crud,我试图使用ReportedWorkout中的WorkoutCaseId从两个不同的表返回数据,并使用PaymentDate从Payment对它们进行排序 报告训练 +-------------------+----------------+ | ReportedWorkoutId | WorkoutCaseId | +-------------------+----------------+ +-----------+--------------------+--------------+-

我试图使用
ReportedWorkout
中的
WorkoutCaseId
从两个不同的表返回数据,并使用
PaymentDate
Payment
对它们进行排序

报告训练

+-------------------+----------------+
| ReportedWorkoutId | WorkoutCaseId  |
+-------------------+----------------+
+-----------+--------------------+--------------+---------------+
| PaymentId | ReportedWorkoutId  | PaymentDate  | PaymentAmount |
+-----------+--------------------+--------------+---------------+
支付

+-------------------+----------------+
| ReportedWorkoutId | WorkoutCaseId  |
+-------------------+----------------+
+-----------+--------------------+--------------+---------------+
| PaymentId | ReportedWorkoutId  | PaymentDate  | PaymentAmount |
+-----------+--------------------+--------------+---------------+
我想以以下方式返回数据:

SELECT * FROM ReportedWorkout
JOIN table2 ON ReportedWorkout.ReportedWorkoutId = Payment.ReportedWorkoutId
WHERE WorkoutCaseId = '123'
ORDER BY PaymentDate DESC

@Entity
@Table(name = "ReportedWorkout")
public class ReportedWorkoutEntity extends BaseEntity{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ReportedWorkoutId")
    private Long reportedWorkoutId;

    @Column(name = "WorkoutCaseId")
    private String workoutCaseId;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "ReportedWorkout")
    private Set<PaymentEntity> payments = new LinkedHashSet<>();

...
}
@Entity
@Table(name = "Payment")
public class PaymentEntity extends BaseEntity{

    @Id
    @Column(name = "PaymentId" , nullable = false)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long paymentId;

    @ManyToOne
    @JoinColumn(name = "ReportedWorkoutId")
    private ReportedWorkoutEntity reportedWorkout;

    @Column(name = "PaymentAmount")
    private BigDecimal paymentAmount;

    @Column(name = "PaymentDate" , nullable = false)
    private LocalDate paymentDate;
...
}
但我不知道如何按付款日期订购

findByWorkoutCaseIdOrderByPaymentDateDesc 
我发现以下错误:

Caused by: org.springframework.data.mapping.PropertyReferenceException: No property paymentDate found for type ReportedWorkoutEntity!

由于paymentDate不是ReportedWorkUtenty的属性,因此该错误是有意义的。对于存储库方法,请使用paymentDate相对于ReportedWorkUtenTity的完全限定名称


因此:findByWorkoutCaseIdOrderByPaymentDateDesc

当您想要使用另一个实体时,您必须在@Repository接口中定义的方法签名中提到它

正如@churd所提到的,您必须仅使用该格式创建方法签名


还有另一个选项,如方法顶部提到的@Query,并在其中定义要执行的sql。

出于某种原因,PersistentSet没有保留顺序:(我确保它是LinkedHashSet,但它仍然不起作用:private Set payments=new LinkedHashSet()