当主键自动递增时,如何使用 JPA (EclipseLink) 从数据库中获取特定的 "row"?

How to get a specific "row" from a DB using JPA (EclipseLink) when the primary key is Auto Incremented?

说我有这个 table

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 来获取主键和其他行值 ?

使用 entityManager 的方法 createQuerycreateNativeQuery

对于 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%");

你可以阅读这个documentation