第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

JPA CriteriaQuery 查詢(xún)每個(gè)實(shí)體的最新數(shù)據(jù)

JPA CriteriaQuery 查詢(xún)每個(gè)實(shí)體的最新數(shù)據(jù)

阿晨1998 2021-12-30 20:11:04
我有一個(gè)使用 SpringBoot 1.5.9 的項(xiàng)目(無(wú)法更改版本)。我有這些實(shí)體:@Entity@Table(name = "data")public class DataEntity extends Timestampable {    @Column(name = "value")    private String value;    @Column(name = "data_timestamp")    private ZonedDateTime dataTimestamp;    @ManyToOne    @JoinColumn    private DataTypeEntity type;    @ManyToOne    @JoinColumn    private AssetEntity asset;}@Entity@Table(name = "data_type")public class DataTypeEntity extends Timestampable {    @Column(name = "name", unique = true)    private String name;    ...}我有這個(gè)工作 SQL 查詢(xún)(在 PostgreSQL 下),以檢索每個(gè)資產(chǎn)的最新數(shù)據(jù)(源):SELECT * FROM data d1JOIN (  SELECT max(data_timestamp) as newest, asset_id FROM data  GROUP BY asset_id) d2ON d1.data_timestamp = d2.newest AND d1.asset_id = d2.asset_idWHERE d1.type_id IN (  SELECT id FROM data_type  WHERE name = 'ELECTRICITY_CONSUMPTION');我想將此查詢(xún)轉(zhuǎn)換為 JPA CriteriaQuery。有沒(méi)有辦法這樣做,或者我是否需要在特定實(shí)體上使用 @SubSelect 注釋?zhuān)?
查看完整描述

2 回答

?
開(kāi)滿天機(jī)

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超13個(gè)贊

我最終使用了一個(gè)帶有 SubSelect 的數(shù)據(jù)庫(kù)視圖。我已將我的 DataEntity 拆分為 2 個(gè)實(shí)體:

  1. 一個(gè)操作數(shù)據(jù)

  2. 另一個(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 {

}


查看完整回答
反對(duì) 回復(fù) 2021-12-30
?
胡子哥哥

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超6個(gè)贊

JPQL不支持FROM或 上的子查詢(xún)JOIN。僅在WHEREorHAVING子句中。Eclipse Link,從 2.4 開(kāi)始,支持FROM子句的子查詢(xún)。

由于每個(gè) Criteria 都轉(zhuǎn)換為 JPQL,因此不可能使用 Criteria 來(lái)做您想做的事。


查看完整回答
反對(duì) 回復(fù) 2021-12-30
  • 2 回答
  • 0 關(guān)注
  • 355 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)