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\""]}

 

posted @ 2018-11-02 19:17  编程狸  阅读(552)  评论(0编辑  收藏  举报