Будьте в спящем режиме / JPA: дубликаты в дочернем наборе

Моя модель данных сделана из Школ и Студентов. У студентов есть FK в Школу, которой они принадлежат. Я не понимаю, почему набор содержит дубликаты, т.е. Joe, Joe, Mary, Mary, Tom, Tom, и т.д. SQL-запрос, сгенерированный, в спящем режиме, корректно и не возвращает дубликаты. Я мог реализовать взлом для отфильтровывания дубликатов, но я не готов жить с разбитым окном все же ;) Я попытался вставить соответствующие части кода ниже. Любая справка значительно ценится!

// SchoolJpa

@OneToMany (
    mappedBy = "school",
    targetEntity = StudentJpa.class,
    fetch = FetchType.LAZY,
    cascade = CascadeType.ALL
)
@Override
public List<Student> getStudentsInternal() {
    return super.getStudentsInternal();
}

// SchoolImpl

private List<Student> students = new ArrayList<Student>();

public List<Student> getStudents() {
    return Collections.unmodifiableList(students);
}

public List<Student> getStudentsInternal() {
    return students;
}

public void setStudentsInternal(List<Students> students) {
    this.students = students;
}
7
задан Francois 14 July 2010 в 15:18
поделиться

1 ответ

Трудно сказать по куску кода, но:

  1. В отличие от множеств, списки обычно допускают дублирование элементов (да, я заметил, что вы сказали, что запрос не возвращает дубликаты, но я хотел указать на то, что вы, возможно, используете не тот тип коллекции).
  2. В любом случае, убедитесь, что вы правильно реализуете equals/hashCode (я подозреваю проблему на этом уровне).

Вообще, можете ли вы показать все отображения? Я не совсем понимаю, почему у вас несколько геттеров и сеттеров на одно и то же поле.

1
ответ дан 6 December 2019 в 12:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: