簡體   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