Spring Data JPA-запрос возвращает повторенную строку вместо фактических данных, почему? - PullRequest
0 голосов
/ 13 ноября 2018

Класс сущности

public class Event {

    @Id
    private String name;

    private String description;

    private Date eventDateTime;

    //getter and setter code
}

Класс обслуживания

EventService {

  @Autowired EventRepository eventRepository;

  List<Event> getEvents () {
     List<Event> events = eventRepository.findAll();

     return events;
  }
}

Для примера набора данных: Event ('add', '', '2018-01-01 00:00:10Событие ('add', '', '2018-01-01 00:10:10') Событие ('delete', '', '2018-01-01 00:20:00') Событие ('edit',' ',' 2018-01-01 00:30:00 ')

JPA запрос findAll () возвращает повторяющиеся строки:

Event (' add ',' ',' 2018-01-01 00:00:10 ') Событие (' add ',' ',' 2018-01-01 00:00:10 ') Событие (' add ',' ',' 2018-01-01 00:00:10 ') Событие (' добавить ',' ',' 2018-01-01 00:00:10 ')

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Чтобы избежать повторения (дублирования) данных, мы должны обеспечить наличие уникального ключа, который будет аннотирован @Id. В этом примере name само по себе не является уникальным, поэтому в результате отображаются дублированные данные. eventDateTime - лучший выбор в качестве уникального поля.

public class Event {

    private String name;

    private String description;

    @Id
    private Date eventDateTime;

    //getter and setter code
}

Или мы можем определить составной уникальный ключ с name и eventDateTime .

public class CompositeKey implements Serializable { 

    private String name;

    private Date eventDateTime;
}

Затем, аннотированный Класс события с @IdClass (CopositeKey.class) и обоими name и eventDateTime полем с @ Id

 @IdClass(CopositeKey.class)
 public class Event {
        @Id
        private String name;

        private String description;

        @Id
        private Date eventDateTime;

        //getter and setter code
    }
0 голосов
/ 13 ноября 2018

Ваш name -колонка является идентификатором сущности (@Id), однако ваши выборочные данные содержат строку data два раза.

Идентификаторы должны быть уникальными, если вы вручнуюприсваивать их (т. е. не использовать сгенерированный идентификатор) приложение обязано сохранять их уникальность.

Если не странное поведение может произойти.

Поэтому вам следует либо исправить данные примера, либо использовать другой столбец (со сгенерированными значениями) в качестве идентификатора права.

...