2017-01-30 36 views
0

如何實現這個想法? 給我發信息:{「idBanner」:2,「fullnameClient」:「Aria」}。 如果點擊不包含在數據庫中,則點擊保存併發送電子郵件業務中心。否則,發送一條消息:「你回覆了」。如何實現這個想法?使用Controller,ServiceImple,Repository,Presentation

(實體):單擊綁定橫幅,橫幅綁定Businesscentr

方法後,身體:{ 「idBanner」:2, 「fullnameClient」: 「詠歎調」}

+0

問題是什麼? –

+0

哪個查詢?什麼是例外? –

+0

@Query(value =「插入點擊(fullnameClient,idBanner)VALUES(:fullnameClient,:idBanner)」,nativeQuery = true) String sentsaveclick(@Param(「fullnameClient」)String fullnameClient,@Param(「idBanner」) long idBanner); –

回答

1

你試圖將兩種方法:使用JPA和JDBC。通常,您應該避免在JPA中使用本機查詢,JPA實體擁有自己的生命週期,並由EntityManager進行管理。

你的代碼,服務可以是這樣的:

 @Transactional 
    public Click sentSaveClick(String fullnameClient, long idBanner) { 
     Banner banner = bannerRepositor.findOne(idBanner); //get existing banner from DB 
     Click click = new Click(); //create new detached instance of Click class 
     click.setBanner(banner); //set banner 
     click.setFullnameClient(fullnameClient); //set fullName 
     click = clickRepository.save(click); //store it to DB and get managed instance of Click 
     return click; 
    } 

而且要小心這是你在你的查詢返回的類型。例如,sent返回String,但idClick的類型爲long

可以用JPA的版本替換這個查詢:

@Query("FROM Click WHERE fullnameClient = :fullnameClient AND banner.idBanner = :idBanner") 
    Click sent(@Param("fullnameClient") String fullnameClient, @Param("idBanner") long idBanner); 

和服務:

@Transactional 
public boolean sent(String fullnameClient, long idBanner) { 
    Click click = clickRepository.sent(fullnameClient, idBanner); 
    return click != null; 
} 
+0

混合兩種方法:使用JPA和JDBC - 這是因爲使用@Query? –

+1

,因爲您嘗試在JPA之外直接使用'nativeQuery'將數據存儲到數據庫中。 –

+0

更新回答。但獲得HTTP狀態415. {「idBanner」:2,「fullnameClient」:「sanya」}。預期回報responseonclick =「您已回覆」,因爲數據庫中有記錄。 –

相關問題