2017-08-28 26 views
1

如何重寫的標準如何重寫JPA標準原生查詢

@Query(value = "select count(*), hicn.name \n" + 
       "from \n" + 
       " table1 cid, \n" + 
       " table2 hicn \n" + 
       "where TRUNC(cid.CREATED_WHEN) = TRUNC(?) \n" + 
       " and hicn.ID = cid.ID\n" + 
       "group by hicn.name", nativeQuery = true) 

,並把結果在DTO查詢?

public class DataDto { 
    private String name; 
    private Long count; 

    public DataDto(String name, Long count) { 
     this.name = name; 
     this.count = count; 
    } 
} 

實體爲例。實體大,爲了方便而減小。你能用「加入」和「和」來展示解決方案嗎?主要的問題是我不明白如何訪問兩個表並使用標準從它們獲取數據。

對於表1

@Data 
    @Entity 
    @Table(name = "TABLE_ONE") 
    public class TableOneModel { 

     @Id 
     @Column(name = "TAB_ONE_ID") 
     private Long tabOneId; 

     @Column(name = "CREATED_WHEN") 
     private Date createdWhen; 
    } 

對於表2

@Data 
    @Entity 
    @Table(name = "TABLE_TWO") 
    public class TableTwoModel { 

     @Id 
     @Column(name = "TAB_TWO_ID") 
     private Long tabTwoId; 

     @Column(name = "NAME") 
     private String name; 
    } 
+1

沒有解決方案。但是,在不需要的查詢中刪除'\ n' – Jens

+2

顯示 – Jens

+0

表中的實體添加了我的實體。 – kel

回答

0
Criteria criteria = session.createCriteria(TableOneModel.class); 
criteria.setFetchMode("TableTwoModel", FetchMode.JOIN).add(Restrictions.eq("trunc(cid.CREATED_WHEN)", "checkpoint")) 
                .setProjection(Projections.projectionList().add(Projections.property("name"), "name") 
                          .add(Projections.rowCount(),"Count") 
                          .add(Projections.groupProperty("name"))).uniqueResult(); 
List list = criteria.list(); 

你的目標必須要尋找靠近這個東西。儘管我沒有測試過代碼。我不知道該如何處理你的方法,因此我在那裏添加了檢查點。如果這是一個動態變量,請研究自己如何將其添加到條件。事實上,這也可能取決於你的代碼。

+0

這不是JPA標準。它是Hibernate標準。這個問題清楚地說明了「JPA標準」 –