繁体   English   中英

一对多关系的JPQL

[英]JPQL for One to Many Relationship

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

如果这是一个SQL查询,那么我只能对设备执行以下查询:

select * from DEVICE where USER_ID = 2 and DEVICENAME = "mypc";

其中USER_ID是DEVICE表中的外键。 但是,如何对用户和设备表进行JPQL查询? 这是有关用户和设备类的一些信息

@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;
}

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();

您可以在查询中使用JPQL路径表达式从一个实体导航到另一个实体,或引用一个实体的属性。

更具体地说,路径表达式对于沿@ManyToOne@OneToOne关系导航非常有用,例如:

SELECT d FROM Device d WHERE d.user.id = :userId AND d.deviceName = :deviceName

在这里, d.user.id是路径表达式。

有关JPQL的一般概述,请参阅Wikibooks上的出色文章

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM