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

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

使用 Spring Boot 對(duì)數(shù)據(jù)庫(kù)進(jìn)行錯(cuò)誤查詢(xún)

使用 Spring Boot 對(duì)數(shù)據(jù)庫(kù)進(jìn)行錯(cuò)誤查詢(xún)

我的 API 中的 @query 有一些問(wèn)題。在我的數(shù)據(jù)庫(kù)中,我有 1 個(gè)包含 5 列的表:id、imie、nazwisko、wiek、miasto。我正在嘗試對(duì)我的數(shù)據(jù)庫(kù)進(jìn)行自定義查詢(xún),然后出現(xiàn) -> 錯(cuò)誤。當(dāng)我像這樣創(chuàng)建 @Query 時(shí):@Query(value = "SELECT * FROM osoba WHERE osoba.id = :id", nativeQuery = true)結(jié)果:{    "id": 1,    "imie": "Szymon",    "nazwisko": "Markowski",    "wiek": 55,    "miasto": "Sosnowiec"}并且知道我正在嘗試進(jìn)行另一個(gè)查詢(xún),例如:@Query(value = "SELECT imie  FROM osoba WHERE osoba.id = :id", nativeQuery = true)現(xiàn)在我們開(kāi)始。它會(huì)產(chǎn)生如下問(wèn)題:2019-09-10 21:44:29.141 ERROR 8068 --- [nio-8080-exec-2] o.h.engine.jdbc.spi.SqlExceptionHelper   : Column 'id' not found.2019-09-10 21:44:29.158 ERROR 8068 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute query; SQL [SELECT imie  FROM osoba WHERE osoba.id = ?]; nested exception is org.hibernate.exception.SQLGrammarException: could not execute query] with root cause有任何想法嗎?
查看完整描述

2 回答

?
慕雪6442864

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

您的問(wèn)題是您的存儲(chǔ)庫(kù)不知道您返回的列類(lèi)型以及如何將它們與您的實(shí)體匹配。首先,您需要更改自定義方法的返回類(lèi)型,如下所示:


@Repository

public interface OsobaRepository extend JpaRepository<Osoba, Integer> {

   @Query(value = "SELECT imie FROM osoba WHERE osoba.id = :id", 

          nativeQuery = true) 

   String findNameById(@Param("id") int id);

}

現(xiàn)在,如果您想將結(jié)果從String轉(zhuǎn)為Json,在您的OsobaServiceImpl(如果存在)中,您需要?jiǎng)?chuàng)建該類(lèi)的一個(gè)實(shí)例Osoba,填充它并返回到控制器,如下所示:


@Service

public ServiceOsobaImpl implementation ServiceOsoba {


    private final OsobaRepository osobaRepository;     


    @Autowired

    public ServiceOsobaImpl(OsobaRepository osobaRepository) {

        this.osobaRepository = osobaRepository;

    }


    // your methods

    ...


    public Osoba findNameById(int id) {

        String name = osobaRepository.findNameById(id);


        Osoba osoba = new Osoba();

        osoba.setName(name);


        return osoba;

    }


}

還有另一種選擇,當(dāng)您使用一個(gè)字段創(chuàng)建簡(jiǎn)單OsobaDto并使用它時(shí)(類(lèi)比之前的選項(xiàng)):


public OsobaDto implements Serializable {


    private String name;


    public OsobaDto() {}


    //getter and setter 

}



@Service

public ServiceOsobaImpl implementation ServiceOsoba {


    private final OsobaRepository osobaRepository;     


    @Autowired

    public ServiceOsobaImpl(OsobaRepository osobaRepository) {

        this.osobaRepository = osobaRepository;

    }


    // your methods

    ...


    public OsobaDto findNameById(int id) {

        String name = osobaRepository.findNameById(id);


        OsobaDto osobaDto = new OsobaDto();

        osobaDto.setName(name);


        return osobaDto;

    }


}

兩個(gè)選項(xiàng)響應(yīng)均為 json 格式。produces = MediaType.APPLICATION_JSON_VALUE當(dāng)然,如果您在控制器方法上方指定(或擁有類(lèi)似的變體)。


更新。如果您使用Osoba類(lèi)并且不想看到null價(jià)值,請(qǐng)執(zhí)行以下操作。創(chuàng)建新界面:


public interface OnlyName {}

下一步是將您的實(shí)體標(biāo)記為@Validated并將字段注釋imie為@JsonView:


@Entity

@Validated

public class Osoba {


   // your code


   @JsonView(OnlyName.class)

   private String imie;


}

和控制器:


@RestController

@RequestMapping("/api/osoba")

public class OsobaAPI {


    @Autowired

    private OsobaRepo osobaRepo;


    @JsonView(OnlyName.class)

    @PostMapping

    @RequestMapping("/getID")

    public Osoba findOsobaById(@RequestParam("id") int id){

        String name = osobaRepo.findNameById(id);

        Osoba osoba = new Osoba();

        osoba.setImie(name);

        return osoba;

    }

}


查看完整回答
反對(duì) 回復(fù) 2023-07-19
?
MMTTMM

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

我確實(shí)像你說(shuō)的那樣,我有類(lèi)似的東西:


@Repository

public interface OsobaRepo extends CrudRepository<Osoba, Integer> {


    @Query(value = "SELECT imie FROM osoba WHERE osoba.id = :id", nativeQuery = true)

    String findNameById(@Param("id") int id);


}

@RestController

@RequestMapping("/api/osoba")

public class OsobaAPI {


    @Autowired

    private OsobaRepo osobaRepo;


    @PostMapping

    @RequestMapping("/getID")

    public Osoba findOsobaById(@RequestParam("id") int id){

        String name = osobaRepo.findNameById(id);

        Osoba osoba = new Osoba();

        osoba.setImie(name);

        return osoba;

    }

}

@Entity

public class Osoba {


    @Id

    @GeneratedValue(strategy = GenerationType.IDENTITY)

    private int id;

    private String imie;

    private String nazwisko;

    private int wiek;

    private String miasto;


    public Osoba() {

    }


    public Osoba(String imie, String nazwisko) {

        this.imie = imie;

        this.nazwisko = nazwisko;

    }


    public Osoba(int id, String imie, String nazwisko, int wiek, String miasto) {

        this.id = id;

        this.imie = imie;

        this.nazwisko = nazwisko;

        this.wiek = wiek;

        this.miasto = miasto;

    }


    public int getId() {

        return id;

    }


    public void setId(int id) {

        this.id = id;

    }


    public String getImie() {

        return imie;

    }


    public void setImie(String imie) {

        this.imie = imie;

    }


    public String getNazwisko() {

        return nazwisko;

    }


    public void setNazwisko(String nazwisko) {

        this.nazwisko = nazwisko;

    }


    public int getWiek() {

        return wiek;

    }


    public void setWiek(int wiek) {

        this.wiek = wiek;

    }


    public String getMiasto() {

        return miasto;

    }


    public void setMiasto(String miasto) {

        this.miasto = miasto;

    }

}

POSTMAN 的原因是:


{

    "id": 0,

    "imie": "Szymon",

    "nazwisko": null,

    "wiek": 0,

    "miasto": null

}

但希望從這個(gè)查詢(xún)中有理由,比如


{

    "imie": "Szymon",

}

編輯:


關(guān)于這個(gè)話題還有一個(gè)問(wèn)題。如果我想獲得 JSON 格式的響應(yīng),例如:“imie,”nazwisko”?我不能使用:


    @Query(value = "SELECT imie, nazwisko FROM osoba WHERE osoba.id = :id", nativeQuery = true)

    String findNameById(@Param("id") int id);


}

如果作為字符串,則導(dǎo)致響應(yīng)。當(dāng)我這樣做時(shí),我得到:


{

    "imie": null,

    "nazwisko": "IMIE, NAZWISKO"

}

也許我應(yīng)該在這里使用 String[] 或創(chuàng)建僅具有這兩個(gè)屬性的新類(lèi)?


查看完整回答
反對(duì) 回復(fù) 2023-07-19
  • 2 回答
  • 0 關(guān)注
  • 158 瀏覽
慕課專(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)