簡體   English   中英

JPQL +准則中可以使用此SQL語句嗎?

[英]Is this SQL statement possible in JPQL + guidelines?

背景:我有一個用戶實體。 用戶實體看起來像:

private String name;
private String address;
private List<Picture> pictureList; //The users pictures
private int rolesBitmask; //Is a bitmask for around 20 different roles
private int anotherBitmask; //Is similar bitmask as the roles
//
// Maybe 20 more fields..

我將擁有一個AJAX搜索網頁,該網頁將在所有這些字段上執行JPQL查詢(也許不是圖片,而是大多數字段)。

例如,網絡用戶可能正在搜索名稱為“ An%”,居住在“ Pica%”之類的地址,具有角色“打印機”,“管理員”,“來賓”的用戶,而忽略其他用戶可用角色。 根據預定義的值將“打印機”,“管理員”和“來賓”角色解釋為位掩碼。

我的第一個問題:

僅用1個JPQL或任何查詢進行此類查詢是一個壞主意嗎?

第二個問題:如果我決定繼續使用這些“復雜”查詢來查詢性能呢(請記住,這是一個AJAX網頁,每次用戶更改表單時,它可能都是新的數據庫訪問權限)。

第三個問題:在SQL中,我將執行以下操作以使所有用戶具有名稱,地址和角色:

SELECT * FROM User WHERE (rolesBitmask & queryRoleBitmask) ^ queryRoleBitmask = 0 AND name LIKE 'An%' AND address LIKE 'Pica%';

據我所知,JPQL不支持按位操作,因此我必須使用本機查詢或嘗試將其轉換為等效的JPQL,但我不知道該怎么做。 你呢?

您能在這里指導我嗎,也許我必須將整個AJAX搜索網頁的想法扔進thrashcan,或者您對此有何看法? 當您處理許多標准時,最佳實踐是什么?

提前致謝

您可以為此使用本機SQL查詢。

JPQL不直接支持按位運算符,但是如果使用EclipseLink,則可以使用SQL運算符。

Select u from User u where SQL('((? & ?) ^ ?)', u.rolesBitmask, u.queryRoleBitmask, u.queryRoleBitmask) = 0 and u.name LIKE 'An%' AND u.address LIKE 'Pica%'

http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/JPQL#SQL

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM