用于一对多关系的 JPQL
JPQL for One to Many Relationship
我正在尝试为一对多关系创建 JPQL,即用户和设备,因为 1 个用户可以拥有一对多设备。如果设备归用户所有且设备名称正确,我想找到设备的整个对象。
如果它是一个 SQL 查询,那么我可以只对设备进行如下查询:
select * from DEVICE where USER_ID = 2 and DEVICENAME = "mypc";
其中 USER_ID 是设备 table 中的外键。但是如何为用户和设备 table 执行 JPQL 查询?以下是用户和设备的一些信息 class
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
public int id;
public String username;
public String firstname;
public String lastname;
public String hashPassword;
@OneToMany(mappedBy = "user")
public List<Device> devices = new ArrayList<Device>();
}
@Entity
public class Device {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
public int id;
public String deviceName;
@ManyToOne
public User user;
String deviceOS;
String deviceType;
String attributes;
boolean standard;
}
您可以在查询中使用 JPQL path expressions 从一个实体导航到另一个实体,或引用实体的属性。
更具体地说,路径表达式对于沿着 @ManyToOne
或 @OneToOne
关系导航很有用,例如:
SELECT d FROM Device d WHERE d.user.id = :userId AND d.deviceName = :deviceName
这里,d.user.id
是一个路径表达式。
有关 JPQL 的一般概述,请查看很棒的 Wikibooks article。
JPA 查询示例:Documention
Query query = entityManager.createQuery("SELECT di FROM Device di JOIN di.user u WHERE u.id=:userId and di.deviceName=:deviceName");
query.setParameter("userId",userId );
query.setParameter("deviceName",deviceName);
List<Device> result = query.getResultList();
我正在尝试为一对多关系创建 JPQL,即用户和设备,因为 1 个用户可以拥有一对多设备。如果设备归用户所有且设备名称正确,我想找到设备的整个对象。
如果它是一个 SQL 查询,那么我可以只对设备进行如下查询:
select * from DEVICE where USER_ID = 2 and DEVICENAME = "mypc";
其中 USER_ID 是设备 table 中的外键。但是如何为用户和设备 table 执行 JPQL 查询?以下是用户和设备的一些信息 class
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
public int id;
public String username;
public String firstname;
public String lastname;
public String hashPassword;
@OneToMany(mappedBy = "user")
public List<Device> devices = new ArrayList<Device>();
}
@Entity
public class Device {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
public int id;
public String deviceName;
@ManyToOne
public User user;
String deviceOS;
String deviceType;
String attributes;
boolean standard;
}
您可以在查询中使用 JPQL path expressions 从一个实体导航到另一个实体,或引用实体的属性。
更具体地说,路径表达式对于沿着 @ManyToOne
或 @OneToOne
关系导航很有用,例如:
SELECT d FROM Device d WHERE d.user.id = :userId AND d.deviceName = :deviceName
这里,d.user.id
是一个路径表达式。
有关 JPQL 的一般概述,请查看很棒的 Wikibooks article。
JPA 查询示例:Documention
Query query = entityManager.createQuery("SELECT di FROM Device di JOIN di.user u WHERE u.id=:userId and di.deviceName=:deviceName");
query.setParameter("userId",userId );
query.setParameter("deviceName",deviceName);
List<Device> result = query.getResultList();