我在使用JPA查詢時遇到了一些麻煩。我現在應該告訴你,我根本不是JPA的專家。JPA select entity and use subquery to assign value in entity all in one query
我有兩個類,Line
和LineData
。
Line
和LineData
之間的關係是,一條線可能有100個與之關聯的對象LineData
。我沒有明確加入他們的原因是因爲大部分時間我檢索Line
實體時,我不需要LineData
(並且看到可能有100個,因此加載它們然後不是使用它們)。
不過,我想怎樣能夠做到,檢索Line
實體時,是得到最大LineData.value1
價值,以及和返回,作爲Line
實體的一部分,作爲Line.maxVal1
。我試着用下面的查詢這樣做:
SELECT l, l.maxVal1 = (SELECT MAX(d.value1) FROM LineData d WHERE d.name = l.name)
FROM Line l
WHERE l.name = example123
ORDER BY l.name ASC
但Line.maxVal1
是回來爲null
。我已經嘗試了它自己的子查詢,它確實返回實際值。是否可以做我在這裏嘗試的?如果是這樣,怎麼樣?
這裏是我班的簡化版本:
public class Line {
@Column(nullable = false, unique = true)
public String name;
@Column
public boolean active;
@Transient
public Integer maxVal1;
}
public class LineData {
@Column(nullable = false)
public String name;
@Column
public Integer value1;
@Column
public Integer value2;
@Column
public Integer value3;
...
@Column
public Integer activeN;
}
編輯 這裏的一個例子是什麼數據庫值將如下所示:
Line
name | active
======================
example123 | true
example234 | false
example345 | true
LineData
name | value1 | value2 | ... | valueN
============================================
example123 | 1 | 2 | | 1
example123 | 3 | 2 | | 1
example345 | 1 | 2 | | 1
example123 | 14 | 2 | | 1
example123 | 2 | 2 | | 1
example123 | 2 | 2 | | 1
example123 | 3 | 2 | | 1
和查詢的結果返回一個線對象,其值爲:
name | active | maxVal1
==============================
example123 | true | 14
你嘗試'選擇L,(SELECT MAX(d.value1)...)爲L。 maxVal1 .....'? – Mubin
@Mubin我嘗試過,但我得到一個IllegalArgumentException,因爲它不喜歡''.'在'l.maxVal1' – gordon
我沒有一個環境設置測試,你可以看到如果你得到的值如果您使用如下查詢:'SELECT l.name,(SELECT MAX(d.value1)...)AS l.maxVal1 FROM Line l .....' – Mubin