Как получить конкретную "строку" из БД, используя 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%");
Вы можете прочитать эту документацию.