मेरे पास दो टेबल हैं: "डेलीस्टैटिस्टिक" कई टूवन से "कंट्री" के साथ।

public class DailyStatistic {
    @Id
    @GeneratedValue
    private Long id;
    @Column(columnDefinition = "DATE")
    private LocalDate date;
    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "country_id")
    private Country country;

///

public class Country {

            @Id
            @GeneratedValue
            private Long id;
            private String name;

जब मैं फोन करता हूं:

public interface DailyStatRepository extends JpaRepository<DailyStatistic, Long> {
...
List<DailyStatistic> findAllByCountryAndDateBetween(Country country, LocalDate from, LocalDate to);
...
}

मुझे अजीब परिणाम मिलता है:

2020-03-29
2020-03-28
2020-03-27
2020-03-30
2020-03-29

हाइबरनेट एक गलत तारीख पर आपत्ति करने के लिए सेट करता है और मुझे एक ही तारीख के साथ दो अलग-अलग ऑब्जेक्ट मिलते हैं।

कृपया, समस्या को हल करने में मदद करें।

वह कोड जहां मैं इस विधि को कॉल करता हूं:

public class DataProvider {

    private final ForeignDataSource foreignDataSource;
    private final DailyStatRepository repository;
    private final CountryRepository countryRepository;

    @Autowired
    public DataProvider(ForeignDataSource foreignDataSource, 
                        DailyStatRepository repository, 
                        CountryRepository countryRepository) {
        this.foreignDataSource = foreignDataSource;
        this.repository = repository;
        this.countryRepository = countryRepository;
    }

public List<DailyStatistic> getCountryStatFromToDate(Long countryId,
                                                         LocalDate from,
                                                         LocalDate to) throws NoDataException {
        Country country = countryRepository.findById(countryId).orElseThrow(NoDataException::new);
        List<DailyStatistic> dailyStatisticList = repository.findAllByCountryAndDateBetween(country, from, to);
        for (DailyStatistic ds : dailyStatisticList) {
            System.out.println(ds.getDate());
        }
0
Oleg Pavlyukov 4 अप्रैल 2020, 11:05
कृपया वह कोड शामिल करें जो इस क्वेरी को कॉल करता है। साथ ही, अपनी तालिका में स्रोत डेटा की जांच करें।
 – 
Tim Biegeleisen
4 अप्रैल 2020, 11:14
बेगेलिसन, उत्तर के लिए धन्यवाद। किया हुआ। डीबी में सब कुछ ठीक है। कंसोल में सरल एसक्यूएल क्वेरी के साथ ऐसा करने का प्रयास किया और परिणामसेट सही था।
 – 
Oleg Pavlyukov
4 अप्रैल 2020, 11:24
Hibernate sets to object a wrong date and I get two different objects with the same date DailyStatistic.date डीबी में अद्वितीय क्षेत्र है?
 – 
Eklavya
4 अप्रैल 2020, 13:09
कृपया एप्लिकेशन लॉग से निष्पादित क्वेरी जोड़ें
 – 
Eklavya
4 अप्रैल 2020, 13:17
घोष, नहीं, ऐसा नहीं है। एक ही तारीख के साथ विभिन्न देशों के लिए कई रिकॉर्ड हैं।
 – 
Oleg Pavlyukov
4 अप्रैल 2020, 13:20

2 जवाब

आप देश के नाम और तारीख के आधार पर DailyStatistic फ़िल्टर के नामकरण के लिए इस jpa विधि को आज़मा सकते हैं

repository.findAllByCountryNameAndDateBetweenOrderByDateDesc(country.name,from, to);
0
Eklavya 4 अप्रैल 2020, 14:43

मुझे कैसे पता चलेगा कि यह ऐप साइड पर एक अलग टाइमज़ोन और डीबी साइड + डेलाइट सेविंग टाइम के कारण होता है जो 29 अप्रैल को हुआ था। इसलिए अगर किसी को भी इसी तरह की समस्या आती है - पहले एक टाइमज़ोन अंतर की जाँच करें।

0
Oleg Pavlyukov 5 अप्रैल 2020, 14:39