У меня есть отношения "один ко многим" между классами User и Country.
Я пытаюсь получить список стран на основе имени пользователя, но сталкиваюсь с ClassCastExeption
//User.java
@Entity(name = "user")
public class User {
@Id
private String username;
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@JoinColumn(name = "username")
private Set<Country> countries;
//setters & getters
}
//Country.java
@Entity
public class Country {
@Id
@GeneratedValue
private int id;
private String name;
//setters and getters
}
// контроллер
System.out.println(entityManager.createNativeQuery("select * from country where username='Hussain'").getResultList().get(0) instanceof Country);
// вывод ложный
Я попытался создать запрос Hql следующим образом
entityManager.createQuery("select c from Country c where c.username='Hussain'")
Это дает ошибку, например, c.username, не свойство класса Country
спасибо в нареч.
Чтобы заявить очевидное ... c.username НЕ ЯВЛЯЕТСЯ СОБСТВЕННОСТЬЮ класса Country, поэтому не запрашивайте его. Посмотри на свой класс! "username" находится в User




Ваш hql должен быть
from User u where u.username='Hussain'
Он вернет вам пользователя и будет использовать
user.getCountries() получить страны.
Подробнее: в реальном мире мы обычно устанавливаем одну страну для нескольких пользователей.
почему вы запрашиваете Country, а не User? у вас есть список стран в объекте "Пользователь".