Построение запроса jpql, значение 1 не соответствует ожидаемому типу

Здравствуйте, у меня есть две таблицы

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
Другие вопросы по тегам