1. 程式人生 > >hinernate使用原生SQL處理

hinernate使用原生SQL處理

如下的事例只是為了說明意圖,工作中業務不會如此簡單。

一、資料庫的欄位

STUDENT_ID
STUDENT_NAME
STUDENT_AGE

二、實體類

// 主鍵 uuid
    @Id
    @Column(name = "STUDENT_ID", length = 100, nullable = false)
    @Size(max = 100, message = "{length.max}")
    @GeneratedValue(generator = "system-uuid")
    @GenericGenerator(name = "system-uuid", strategy = "uuid")
    
private String studentId; //學生姓名 @Column(name = "STUDENT_NAME", length = 19) @Size(max = 19, message = "{length.max}") private String studentName; //年齡 @Column(name = "STUDENT_AGE" , length = 3) @Size(max = 3, message = "{length.max}") private Int studentAge;

三、因為某種特殊的原因,我必須使用hibernate結合原生SQL進行資料的查詢操作。

四、封裝結果的VO類

private String studentId;
private String studentName;
private String studentAge;

五、利用hibernate進行原生SQL查詢時,必須保證查詢出來的屬性名稱與封裝結果的VO類中成員的屬性名稱一致。

六、原生SQL的書寫

請注意此處  \"   的用法
select  a.student_id as \"studentId\"   a.student_name as  \"studentName\" from student a where a.student_age = '18'

七、前臺的頁面需要按age欄位排序,且這個欄位必須由前端傳遞

  後臺看到的sql如下

    select
        * 
    from
        (
        select a.STUDENT_ID as "studentId", a.STUDENT_NAME as "studentName"
        from  student a where a.STUDENT_AGE = '18'
        ORDER BY
            studentAge  ASC,
         
    ) 

  上面的SQL是會報錯的,ORA-00904: "STUDENTAGE": 識別符號無效

  這時,你需要告訴你們的前端傳遞 studentAge時,應該加一對二""

  Postman軟體的Body應該這樣寫

"orderby":["+\"studentAge\""]}