hinernate使用原生SQL處理
阿新 • • 發佈:2018-11-02
如下的事例只是為了說明意圖,工作中業務不會如此簡單。
一、資料庫的欄位
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\""]}