2 回答

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超13個(gè)贊
我最終使用了一個(gè)帶有 SubSelect 的數(shù)據(jù)庫(kù)視圖。我已將我的 DataEntity 拆分為 2 個(gè)實(shí)體:
一個(gè)操作數(shù)據(jù)
另一個(gè)視圖,僅用于檢索最新數(shù)據(jù)
基類(lèi):
@MappedSuperclass
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class AbstractDataEntity extends Timestampable {
@Column(name = "value")
protected String value;
...
}
操作類(lèi):
@Entity
@SequenceGenerator(name = "idgen", sequenceName = "data_seq")
@Table(name = "data")
@DiscriminatorValue("DataEntity")
public class DataEntity extends AbstractDataEntity {
@Override
public DataEntity setValue(String value) {
super.setValue(value);
return this;
}
...
}
查看類(lèi):
@Entity
@Immutable
@SequenceGenerator(name = "idgen", sequenceName = "view_data_last_seq")
@DiscriminatorValue("LastDataView")
@Subselect(
"SELECT * FROM data d1 " +
"JOIN ( " +
" SELECT max(d.data_timestamp) as newest, d.asset_id, d.type_id FROM data d " +
" WHERE d.parameter_id IS NULL " +
" GROUP BY d.asset_id, d.type_id" +
") d2 " +
"ON d1.data_timestamp = d2.newest " +
" AND d1.asset_id = d2.asset_id " +
" AND d1.type_id = d2.type_id"
)
public class LastDataView extends AbstractDataEntity {
}

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超6個(gè)贊
JPQL不支持FROM
或 上的子查詢(xún)JOIN
。僅在WHERE
orHAVING
子句中。Eclipse Link,從 2.4 開(kāi)始,支持FROM
子句的子查詢(xún)。
由于每個(gè) Criteria 都轉(zhuǎn)換為 JPQL,因此不可能使用 Criteria 來(lái)做您想做的事。
添加回答
舉報(bào)