Построение запроса jpql, значение 1 не соответствует ожидаемому типу
Здравствуйте, у меня есть две таблицы
2. Номер телефона
Я пытаюсь добиться такого запроса
SELECT * FROM jobs.phonenumber where Person_ID='1';
но в jpql.
Я пытался сделать что-то вроде:
String query="SELECT p1 FROM PhoneNumber p1 WHERE p1.person=:id;
Вот пример моих классов сущностей:
@Entity
public class PhoneNumber {
@Id
@GeneratedValue
@Column(name = "phoneId")
private long id;
@Column(name = "phoneNumber")
private int number;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name = "Person_ID")
private Person person;
@Entity
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "personId")
private long id;
@Column(name = "personName")
private String name;
@Column(name = "personAge")
private int age;
@OneToMany(mappedBy = "person")
private List<PhoneNumber> phones;
У меня ошибка: значение параметра 1 не соответствует ожидаемому типу [model.Person (n/a)]
вот мой метод:
@Path("{id}/phones")
@GET
@Produces(MediaType.TEXT_PLAIN)
public List<PhoneNumber> getPhoneNumbers(@PathParam(value = "id") long id) {
List<PhoneNumber> resultList = new ArrayList<>();
EntityManager createEntityManager = emf.createEntityManager();
String query="select p1 from PhoneNumber p1 where p1.person=:id";
TypedQuery<PhoneNumber> createNamedQuery = createEntityManager.createQuery(query, PhoneNumber.class);
createNamedQuery.setParameter("id", id);
try {
resultList = createNamedQuery.getResultList();
} catch (Exception e) {
System.out.println("Could not retrive phone list");
}
return resultList;
}
Может ли кто-нибудь помочь мне с этим, что я делаю не так?
2 ответа
Вам либо нужно использовать person.id
запросить:
String query="select p1 from PhoneNumber p1 where p1.person.id=:id";
или сначала найдите человека, а затем используйте его в качестве параметра:
Person person = createEntityManager.find(Person.class, id);
String query="select p1 from PhoneNumber p1 where p1.person=:id";
TypedQuery<PhoneNumber> createNamedQuery = createEntityManager.createQuery(query, PhoneNumber.class);
createNamedQuery.setParameter("id", person);
Используйте запрос ниже:
select p1 from PhoneNumber p1 where p1.person.id=:id