Как получить конкретную "строку" из БД, используя JPA (EclipseLink), когда первичным ключом является Автоинкремент?

Скажи, у меня есть этот стол

CREATE TABLE person(
    person_id INT AUTO_INCREMENT PRIMARY KEY,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    x_cordinates INT,
    y_cordinates INT
);

В прошлом я использовал

Person person = EntityManager.find(Person.class, primaryKey);

Но первичный ключ в этом экземпляре автоматически увеличивается, возможно ли получить строку назад, используя другие столбцы, такие как first_name и last_name, чтобы получить первичный ключ вместе с другими значениями?

2 ответа

Решение

Используйте метод createQuery или createNativeQuery entityManager.

С createQuery ты должен использовать JPQL синтаксис и с createNativeQuery, вы должны использовать стандартный синтаксис SQL.

Например:

Query query = EntityManager.createQuery("select * from person p where p.first_name = :fname");
17.
query.setParameter("fname", firstName);
Person p = query.getSingleResult();

Вы можете создать NamedQuerry следующим образом:

@NamedQuery(name="person.findAll", query="SELECT p FROM Person p WHERE like :first_name") 

И может присвоить значение "first_name" следующим образом:

query.setParamter("fist_name", "%name%");

Вы можете прочитать эту документацию.

Другие вопросы по тегам