springDataJpa多表級聯查詢(@ManyToOne @OneToOne)
背景:
主要是記錄自己遇到的坑,最後是通過註解解決的@ManyToOne @OneToOne,其實這個問題碰到過,今天又踩了
主要問題:
兩個類要實現級聯查詢,比如Iteminformation 、Timesetting,類裡面欄位先不管,第一反應是建個VO類(主要是看到公司了有類似的建DTO類的程式碼,那是對一個有太多欄位的類而只查詢部分欄位的臨時類)
@Query("select distinct new cn.com.dto.SpxxDTO(t.dzsphm, t.kprq, t.fkjnfsDm, t.fkssswjgDm, t.zffsDm) from SpxxCMP t where t.spztDm in (:spztList)")
List<SpxxDTO> findSpztDmInAndZffsDmIn(@Param("spztList") List<String> spztList);
所以就這樣寫了,如下
public class ItemInformationVO {
private Iteminformation iteminformation;
private Timesetting timesetting;
public ItemInformationVO() {
super();
}
public ItemInformationVO(Iteminformation iteminformation, Timesetting timesetting) {
this.iteminformation = iteminformation;
this.timesetting = timesetting;
}
//getter setter
}
在資料庫介面類中新增介面如下:
@Repository
public interface ItemInfomationRepository extends JpaRepository<Iteminformation, Integer>,JpaSpecificationExecutor<Iteminformation>,PagingAndSortingRepository<Iteminformation, Integer>{
@Query(value = "select new com.sssp.utils.DTO.ItemInformationVO(i,t) FROM Iteminformation i,Timesetting t where i.itemid = t.itemid")
public List<ItemInformationVO> findAllItemInformation1();
}
看似挺好的呀,將查出來的物件建個物件,級聯查詢成功 ,資料也能獲取。
此時,有一個問題,這個查詢介面怎麼做分頁查詢,怎麼做條件查詢呢?一下子想不出來了,感覺要自己寫jpa了(會的大佬給我提個醒,感謝)
然後才發現我們這樣建表不是有外來鍵銜接的嗎?
@Cacheable
@Table(name = "iteminformation")
@Entity
public class Iteminformation {
@Id
@Column(name = "itemid")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer itemid;
@Column(name = "itemname")
private String itemname;
@Column(name = "grade")
private String grade;
@Column(name = "itemhead")
private String itemhead;
@Column(name = "phone")
private String phone;
@Column(name = "email")
private String email;
@Column(name = "professional")
private String professional;
@Column(name = "teammembers")
private String teammembers;
@OneToOne
@JoinColumn(name="timesetting",referencedColumnName="timesettingId")
private Timesetting timesetting;
//以下省略
}
@OneToOne
這裡的@OneToOne指的是兩個類物件是一對一的關係,比如一夫一妻制,當然也有@ManyToMany,@ManyToOne,比如人可以有很多本書,一本書也可以被很多人借一樣
@JoinColumn(name="timesetting",referencedColumnName="timesettingId")
@JoinColumn註解指定表關係
name指定了外來鍵的名稱,referencedColumnName指定被連結的表的外來鍵名稱,這樣就關聯了起來。
@Cacheable
@Table(name = "timesetting")
@Entity
public class Timesetting {
@Id
@Column(name = "timesettingId")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer timesettingId;
@JsonFormat(pattern = "yyyy-MM-dd")
@Column(name = "starttime")
private Date starttime;
@JsonFormat(pattern = "yyyy-MM-dd")
@Column(name = "endtime")
private Date endtime;
@JsonFormat(pattern = "yyyy-MM-dd")
@Column(name = "midtime")
private Date midtime;
@JsonFormat(pattern = "yyyy-MM-dd")
@Column(name = "finaltime")
private Date finaltime;
//以下省略
}
這樣就能查出來了
有什麼問題歡迎大家一起討論,對你有所幫助也請您點個贊哦。
JPA使用記錄:
@Query(value = "select new cn.com.dto.xnhplsb.response.XnhResponseDTO(count(t.id),SUM(t.yjfe), SUM(CASE WHEN t.zsxmDm = '10201' or t.zsxmDm = '10210' then t.yjfe ELSE 0 END)," +
"SUM(CASE WHEN t.zsxmDm = '10203' or t.zsxmDm = '10207' or t.zsxmDm = '10212' then t.yjfe ELSE 0 END))" +
"from WtdsXnhTzmxCMP t where t.tzjlId =:tzjlId and t.jyjg=:jyjg")
XnhResponseDTO findZjeByTzjlIdAndJyjg(@Param("tzjlId") String tzjlId, @Param("jyjg") String jyjg);
XnhResponseDTO中只有配置相應的建構函式既可以了
public XnhResponseDTO(double zje, double yangLJhej, double yiLJehj) { //臺賬明細總金額計算用
this.yiLJehj = new BigDecimal(yiLJehj);
this.yangLJhej = new BigDecimal(yangLJhej);
this.zje = new BigDecimal(zje);
}
這樣就可以實現多表查詢
相關文章
- SpringDataJpa (二)-動態查詢&多表操作Spring
- springDataJpa聯表查詢之多對多Spring
- MySQL多表關聯查詢MySql
- JPA多表關聯查詢
- thinkPHP多表聯合查詢PHP
- JPA 之 多表聯合查詢
- jpa動態查詢與多表聯合查詢
- 如何做多表關聯查詢
- mysql中的多表關聯查詢MySql
- thinkphp中的多表關聯查詢PHP
- @OneToOne、@ManyToOne的具體使用與區別
- MyBatisPlus怎麼多表關聯查詢?MyBatis
- mybatis多表聯合查詢的寫法MyBatis
- 多表查詢
- onethinkphp 如何做多表關聯查詢PHP
- 多表聯合查詢 - 基於註解SQLSQL
- 【MySQL】多表查詢MySql
- Django 多表查詢Django
- MySQL 多表查詢MySql
- 04多表查詢
- mysql多表查詢MySql
- MYSQL學習筆記24: 多表查詢(聯合查詢,Union, Union All)MySql筆記
- SQL優化之多表關聯查詢-案例一SQL優化
- Spring Data JPA 實現多表關聯查詢Spring
- SQL查詢的:子查詢和多表查詢SQL
- Oracle-多表查詢Oracle
- ORM多表查詢下ORM
- Mybatis【15】-- Mybatis一對一多表關聯查詢MyBatis
- Mybatis 多表關聯查詢(1) one-to-one關係MyBatis
- SQL Server 多表聯合查詢取最新一條資料SQLServer
- MySQL 多表查詢分頁MySql
- Hibernate hql 多表查詢
- 多表關聯查詢中,關聯欄位都應該建立索引嗎?索引
- Hierarchical Queries 級聯查詢(樹狀結構查詢)
- [冷楓推薦]:資料庫操作,內外聯查詢,分組查詢,巢狀查詢,交叉查詢,多表查詢,語句小結。資料庫巢狀
- MyBatis 多表聯合查詢,欄位重複的解決方法MyBatis
- hibernate懶載入導致多表聯合查詢失敗
- DataSet多表關聯實現本地資料複雜的查詢