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

原文地址:https://www.cnblogs.com/ping-pong/p/9897997.html

时间: 2024-11-08 23:47:38

hinernate使用原生SQL处理的相关文章

atitit. hb 原生sql跨数据库解决原理 获得hb 数据库类型运行期获得Dialect

#-----原理 Hibernate 运行期获得Dialect 2010-07-28 12:59:58|  分类: 软件开发 |举报 |字号 订阅 String dialect = ((SessionFactoryImpl) session.getSessionFactory()).getDialect() .getClass().getName(); //     //org.hibernate.dialect.MySQLDialect 如果是spring + hibernate则可以: St

Hibernat 原生SQL运行结果集处理方法

hibernate对原生SQL查询执行的控制是通过SQLQuery接口进行的. Session.createSQLQuery(); 使用list()方法可以把Session.createSQLQuery()的结果集处理成List返回,将返回一个Object数组(Object[])组成的List,数组每个元素都是CATS表的一个字段值.Hibernate会使用ResultSetMetadata来判定返回的标量值的实际顺序和类型. 如果要避免过多的使用ResultSetMetadata,或者只是为了

Hibernate原生sql的查询,返回结果设置到DTO

原生sql的查询,返回结果设置到DTO: Query query = sessionFactoryRtData.getCurrentSession().createSQLQuery(hql.toString()).setResultTransformer(Transformers.aliasToBean(RTDataAttrDto.class));

entityframework学习笔记--009-使用原生sql语句操作数据

1 使用原生SQL语句更新--Database.ExecuteSqlCommand 假设你有一张如图9-1所示的Payment数据库表. 图9-1 1.1 实体类型: 1 public class Payment 2 { 3 public int PaymentId { get; set; } 4 public decimal Amount { get; set; } 5 6 public string Vendor { get; set; } 7 } 1.2 数据访问类: 1 public c

Hibernate5.2之原生SQL查询

Hibernate5.2之原生SQL查询 一. 介绍  在上一篇博客中笔者通过代码的形式给各位读者介绍了Hibernate中最重要的检索方式--HQL查询.在本博文中笔者将向各位读者介绍Hibernate中的原生SQL查询,虽为原生SQL查询,但是笔者认为Hibernate在针对不同的数据库在分页语句的处理上做的很不错,我们不用去关心使用的是何种的数据库.本博文会沿用<Hibernate5.2之HQL查询>中的POJO类和配置文件,请各位看官在阅读本博文之前请先阅读该文章,本篇文章会将HQL中

Hibernate的HQL和原生SQL返回简单对象

最近跟了一个技术经理,他有个要求就是所有的查询比结果都必需是对象,不是是map之类的,而且有很多对象的是很多实体相联合组成的对象,所有又专门研究了hibernate返回对象的知识 这次讨论的对象都是组合对象,就是很多实体相关联,取他们一部分字段的组合对象, Hql 首先扩展的对象 package com.hfview.bean; import java.util.ArrayList; import java.util.List; public class PersonEx { private S

在Hibernate中使用原生SQL语句

使用原生SQL查询必须注意:程序必须选出所有的数据列才可被转换成持久化实体.假设实体在映射时有一个<many-to-one../>的关联指向另外一个实体,则SQL查询中必须返回该<many-to-one../>映射的外键列,否则将导致抛出"column not found"异常.最简单的做法是,在SQL字符串中使用星(*)来表示返回所有列.    在原生SQL语句中一样支持使用参数,这些参数即可使用问号参数(?),也可使用名字参数. 示例1:名字参数public

Laravel5.1 数据库--DB运行原生SQL

Laravel操作数据库有三种:DB原生SQL.构建器.Model.这三种依情况而决定使用哪种更合适. 那么今儿咱就从DB原生SQL说起: 1 用DB门面原生SQL语句操作 用DB门面操作的话呢 无非就是:insert.select.update.delete 另外附加一个statement(通用语句 比如drop之类的). 1.1 insert public function getInsert() { DB::insert('INSERT INTO articles (title, body

django中使用原生sql

在Django中使用原生Sql主要有以下几种方式: 一:extra:结果集修改器,一种提供额外查询参数的机制 二:raw:执行原始sql并返回模型实例 三:直接执行自定义Sql ( 这种方式完全不依赖model,前两种还是要依赖于model ) 实例: 使用extra: 1:Book.objects.filter(publisher__name='广东人员出版社').extra(where=['price>50']) Book.objects.filter(publisher__name='广东