JPQL为一对多关系

Ihs*_*kal 3 java mysql jpa eclipselink jpql

我正在尝试为一对多关系创建一个JPQL,即用户和设备,因为1个用户可以拥有一个到多个设备.我想找到设备的整个对象,如果它由用户拥有并且设备名称是正确的.

如果是SQL查询,那么我只能对设备进行如下查询:

select * from DEVICE where USER_ID = 2 and DEVICENAME = "mypc";
Run Code Online (Sandbox Code Playgroud)

其中USER_ID是DEVICE表中的外键.但是如何为用户和设备表执行JPQL查询?以下是User和Device类的一些信息

@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;
}
Run Code Online (Sandbox Code Playgroud)

ozg*_*gur 6

示例JPA查询:文档

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();
Run Code Online (Sandbox Code Playgroud)