Я пытаюсь выполнить свои первые шаги на Java, и я заблокирован следующей проблемой: у меня есть этот класс hieararchy «Пользователь -> Путешественник».Querying по унаследованному свойству
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public class User {
// Some properties and accessors.
}
@Entity
@PrimaryKeyJoinColumn(name="user_id")
public class Traveller extends User{
// Some properties and accessors.
}
Итак, мне нужно найти путешественника по имени пользователя, которое является свойством класса пользователя. Я стараюсь это в моем TravellerDao:
public Traveller findByUsername(String username){
EntityManager em = PersistenceHelper.getEm();
TypedQuery<Traveller> query = em.createQuery("FROM Traveller WHERE username = ?1", Traveller.class);
query.setParameter(1, username);
return query.getSingleResult();
}
Но javax.persitence.NoResultException является пойманным. В чем проблема ? В «где» клаузула? В соединении?. Есть идеи ?
Примечания:
1) Иерархия в порядке с "найти" метод работы. И база данных генерируется правильно.
2) У меня есть запись в таблице Traveler, которая связывает до одного в таблице User.
3) В базе данных существует пользователь с именем пользователя, которое я использую для тестирования.
4) Метод корректно использует параметр «имя пользователя».
EDIT: теперь работает. Проблема заключалась в порядке выполнения тестовых случаев. Запрос работает нормально.
Изменить запрос, но результаты одинаковы. – ramiromd
Вы проверили, что ваша база данных содержит в себе правильные данные, просмотрев SQL-запрос? Вы видите запись в таблице Traveler, которая связывает до одного в таблице User? У них есть имя пользователя, которое вы ожидаете? Вы проверили, чтобы передать правильное имя пользователя в метод findByUsername? Я бы сделал system.out.println() имени пользователя до того, как SQL запустится для чего-то быстрого и грязного. – Jazzepi
Да, у меня есть пользователь с желаемым именем пользователя. И да, параметр в порядке. – ramiromd