有nativeQuery = true和没有的区别
有nativeQuery = true時(shí),是可以執(zhí)行原生sql語(yǔ)句,所謂原生sql,也就是說(shuō)這段sql拷貝到數(shù)據(jù)庫(kù)中,然后把參數(shù)值給一下就能運(yùn)行了,比如:
@Query(value = "select * from product_rel where audit_id=?1 and process_object=0 ",nativeQuery = true) List<ProductRel> findAllByProductAuditId(Integer id);這個(gè)時(shí)候,把select * from product_rel where audit_id=?1 and process_object=0拷貝到數(shù)據(jù)庫(kù)中,并給audit_id賦一個(gè)值,那么這段sql就可以運(yùn)行。其中數(shù)據(jù)庫(kù)表在數(shù)據(jù)庫(kù)中的表名就是product_rel,字段audit_id在數(shù)據(jù)庫(kù)中也是真實(shí)存在的字段名。
沒有nativeQuery = true時(shí),就不是原生sql,而其中的select * from 的xxx中xxx也不是數(shù)據(jù)庫(kù)對(duì)應(yīng)的真正的表名,而是對(duì)應(yīng)的實(shí)體名,并且sql中的字段名也不是數(shù)據(jù)庫(kù)中真正的字段名,而是實(shí)體的字段名。例如:
@Query("select ratio from MdmRatio where enabledNum=1 ") List<MdmUtilThreeProjection> findByMdmUtilThreeProjection();此中,select ratio from MdmRatio中的MdmRatio為實(shí)體名,不是真正的數(shù)據(jù)庫(kù)表名,真正的數(shù)據(jù)庫(kù)表名是mdm_ratio(如上圖@Table里面寫的那樣,MdmRatio實(shí)體對(duì)應(yīng)的數(shù)據(jù)庫(kù)表名是mdm_ratio。但不一定都是這樣的,可能你的MdmRatio實(shí)體對(duì)應(yīng)的數(shù)據(jù)庫(kù)表是mdm_ratio_abc,但whatever,隨便是什么,只要它真實(shí)存在就Ok),而查詢條件中的enabledNum在數(shù)據(jù)庫(kù)中真正的名字是enabled_num。
這兩個(gè)的作用是一樣的,只是寫法不同而已。涉及到HQL的知識(shí)。
總結(jié)
以上是生活随笔為你收集整理的有nativeQuery = true和没有的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前后端传递时间参数偶遇参数类型转换异常
- 下一篇: Tomcat启动报404(eclipse