使用Spring Data Jpa遇到問題彙總

用於記錄我在使用spring data jpa時遇到的各類問題及其解決方案html

自定義查詢語句(@Query 與 nativeQuery)

只須要在方法上加上註解@Query便可,默認使用HQL以下: NetworkInfo是對應的實體類java

@Query("SELECT count(n.network) FROM NetworkInfo n where network=?1")
 Long countDeviceNumByNetwork(String network);
複製代碼

如須要使用數據庫的SQL語句,則須要在@Query註解內加上 nativeQuery=true如 @Query(value="xxx",nativeQuery=true) 以下:spring

@Query(value = "SELECT network_type,count(network_type) as count FROM network_manage WHERE network = ?1 " +
            "and TIMESTAMPDIFF(YEAR,(CASE WHEN DATE(in_net_date) is NULL THEN " +
            "CONCAT(in_net_date,'/01/01') ELSE in_net_date END),NOW())>=?2 GROUP BY network_type", nativeQuery = true)
    List<Object[]> countDeviceNumInNetDateMoreThanYEARSIntGroupByNetworkType(String network, int years);
複製代碼

返回自定義查詢對象(如"select new Map(xx,xx,xx)")

能夠在註解裏使用HQL來返回自定義對象 例子如: @Query("select new XXX(XX)") 默認返回的Map是以序號爲key(如0,1,2) 樣例:sql

@Query("SELECT new Map(manufacturer,networkType,count(manufacturer)) FROM NetworkInfo WHERE network = ?1 " +
            "GROUP BY manufacturer,networkType")
    List<Map<String, Object>> countDeviceNumGroupByManufacturerAndNetworkType(String network);
複製代碼

如果使用nativeQuery默認返回一條記錄爲Object[] 樣例見上面自定義查詢語句數據庫

字段映射相關問題

字段命名解析

我使用spring boot + spring data jpa時,默認的表名映射規則是遇到大寫(好比aAaAa),則將大寫字母替換爲下劃線+小寫字母(a_aa_aa). 通常JAVA中的變量命名規範都符合駝峯式,此時數據庫遇到一個字段"portDesc",而個人實體類的變量名也爲portDesc,此時就會將這個portDesc解析爲"port_desc"而後就會報錯. 我查了兩種解決方法 1.最方便的解決方案是給字段加上@Column(name="portdesc") (前提是你的數據庫大小寫不敏感?) 2.還有更改解析策略的方式(spring boot配置):bash

spring.jpa.hibernate.naming.physical-strategy = org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
複製代碼

可是使用了這種方式會讓默認的駝峯解析成下劃線的規則失效.spa

字段類型解析

使用映射時,我遇到了text,longtext,set等字段類型,使用默認的映射規則時報了錯,沒法直接使用String獲取. 解決方案@Column(columnDefinition="XXX")..net

@Transient

當咱們在實體類中加上一個不與數據庫表一一對應的成員變量的時候,此時咱們只要在這個成員變量上加上註解@Transienthibernate

分頁

經過Pageable來分頁查詢 blog.csdn.net/u011848397/…
多種方法實現分頁(包括HQL或本地sql) www.cnblogs.com/hdwang/p/78…
Spring Data JPA: 分頁和排序 blog.csdn.net/u011848397/…code

相關文章
相關標籤/搜索