春天的数据和Oracle返回从查询不同的结果?为什么?

问题描述 投票:-1回答:1

我的JPA查询是非常复杂的,因为我是用nativequery的,但是当我运行它返回从JAVA查询Oracle查询不同的结果。但是Oracle查询返回正确result.What可能是什么原因呢?

我改变了SELECT语句,尝试通过获取所有的人。*,并尝试获取只需要列。我也删除日期比较报表。然而有趣的是JPA查询返回4行,他们都是一样准确。我还没有尝试在DATE比较部分TRUNC关键字来获取数据,并且它没有奏效。此外,我在其中不再任职于本机查询表的前面添加模式名称。

public Optional<LocalDateTime> getPaymentPeriod2(LocalDate reportDate, String loanId)
{



final String reportDateParemeter = reportDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));

    final String query = "SELECT st.t_no, st.islem_tarihi, st.s_kodu, st.odeme_suresi " +
                "FROM k_tarihce st, k_tanim sta, kt_tanim tta " +
                "WHERE st.s_kodu = sta.s_kodu " +
                "AND tta.s_tipi = sta.s_tipi AND tta.t_kodu = st.t_kodu " +
                "AND st.t_no = :loanId AND st.t_kodu in (37,55) " +
                "AND st.s_kodu = 'K1' AND (TRUNC(st.odeme_suresi) >= TRUNC(TO_DATE(:reportDateParemeter,'yyyy-mm-dd')))";

    final Query loanGetPaymentPeriodQuery = entityManager.createNativeQuery(query, LoanStatusHistory.class);
        loanGetPaymentPeriodQuery.setParameter("reportDateParemeter", reportDateParemeter);
        loanGetPaymentPeriodQuery.setParameter("loanId", loanId);
        List<LoanStatusHistory> loanStatusHistoryList = loanGetPaymentPeriodQuery.getResultList();

        return loanStatusHistoryList.isEmpty() ? Optional.empty() : Optional.of(loanStatusHistoryList.get(0).getPaymentPeriod());
    }

而我的实体是:

@Entity
@Table(name = "K_TARIHCE", schema = "LOS")
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Cacheable(false)
@IdClass(LoanStatusHistoryId.class)
public class LoanStatusHistory {
    @Id
    @Column(name = "T_NO")
    private String loanId;
    @Id
    @Column(name = "ISLEM_TARIHI")
    private LocalDate processDate;
    @Id
    @Column(name = "S_KODU")
    private String statusCode;
    @Column(name = "ODEME_SURESI")
    private LocalDateTime paymentPeriod;
    @Column(name = "T_KODU")
    private String historyCode;
}

class LoanStatusHistoryId implements Serializable {
    private String loanId;
    private transient LocalDate processDate;
    private String statusCode;
}

我想与Oracle SQL Developer中相同的结果。我的主要目标是获取ODEME_SURESI场。

java oracle spring-boot spring-data-jpa
1个回答
0
投票

我找到了解决方案,又来了!有趣!在这里我新的代码下面,我只是没有映射我的实体机查询,并返回一些LOCALDATE的。

final Query loanGetPaymentPeriodQuery = entityManager.createNativeQuery(query);
            loanGetPaymentPeriodQuery.setParameter("reportDateParemeter", reportDateParemeter);
            loanGetPaymentPeriodQuery.setParameter("loanId", loanId);
            final List<LocalDate> loanStatusHistoryList = loanGetPaymentPeriodQuery.getResultList();

            return loanStatusHistoryList.isEmpty() ? Optional.empty() : Optional.of(loanStatusHistoryList.get(0));

这是我做出的唯一改变。我仍然不知道为什么它的工作?

© www.soinside.com 2019 - 2024. All rights reserved.