当主键自动递增时,如何使用 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 的方法 createQuery 或 createNativeQuery。
对于 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。
说我有这个 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 的方法 createQuery 或 createNativeQuery。
对于 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。