Я использую Java 8 и Spring Data JPA с Hibernate. Я наблюдаю странное поведение.JPA - Ленатически загруженная ссылка на объект имеет свои поля null
Все отношения сущностей LAZY загружены.
Course toBeMatched = //...a repository call to get a course...;
for (Student s : college.getStudents()) {
if (s.getCourse().equals(toBeMatched)) {
found = true;
}
}
Мой equals()
метод возвращает false
даже для подлинных случаев. Реализация Course#equals
несколько вдоль этих линий:
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
Course other = (Course) obj;
if (shortName == null) {
if (other.shortName != null)
return false;
} else if (!shortName.equals(other.shortName))
return false;
return true;
}
Выпуск: Моя проблема заключается в том, что shortName.equals(other.shortName)
не может ошибочно, так как other.shortName
всегда null
, однако, если я использую other.getShortName()
, я получаю значение правильно.
Мой вопрос заключается в том, что я делаю что-то принципиально неправильно, обращаясь к полям лениво загруженной сущности вместо того, чтобы проходить через свои методы получения.
Это то, что вы получаете при использовании Hibernate, используя прокси, вместо улучшения байткода, и, следовательно, это невежественно относительно ленивых полей загрузки, поскольку он не может определить их использование. Включите усовершенствование байт-кода или используйте поставщика JPA, который делает это из коробки –