關於Spring-JPA框架下使用多表查詢的應用例項記錄
1.目的:記錄如何 用jpa來實現快速的多表查詢, 暫不深入探究jpa的內部實現
2. 說明情形:
@1所涉及的表為t_user(id,name,date,...);t_factory_user(id,factory_id,user_id,...), 其中表s_factory_user[user_id]==t_user[id], 為主外來鍵的關聯關係
@2現狀 在entity類User中, 如下程式碼:
@OneToMany(mappedBy = "s_factory_user", fetch = FetchType.LAZY, cascade = {CascadeType.ALL})
private FactoryUser fu = new FactoryUser();
在entity類FactoryUser中, 如下程式碼:
@ManyToOne(cascade = {CascadeType.MERGE, CascadeType.REFRESH})
@JoinColumn(name = "user_id")
private User user;
新增程式碼後, 在啟動專案後會報錯, “org.hibernate.MappingException: Could not determine type for:”, 即為在不能在Use實體類中,定義屬性fu(fu屬性型別為factoryUser);
解決:在查詢了相關文章後, “mappingexception”是指配置hibernate配置檔案時錯誤或沒有載入上hbm配置檔案。現在該專案中用到的是jpa的註解方式來配置hibernate對映關係,還是我在屬性的註解上有錯誤。 嘗試直接在屬性上新增屬性@Transient, 載入依然報錯,那麼現在簡單瞭解一下@OneToMany的使用;
@1.其中的mappedBy指的是關聯類FactoryUser中的屬性名user
@2. 在factoryUser類中,@JoinColumn中的name屬性為‘userId’, 是對應的factoryUser的屬性userId
則正常的應該為:
在factoryUser類中
private User user;
@OneToOne(cascade = {CascadeType.MERGE, CascadeType.REFRESH})
@JoinColumn(name = "userId")
public User getUser() {
return user;
}
在User類中
private FactoryUser fu;
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "user")
public FactoryUser getFu() {
return fu;
}
ok, 這樣專案可以正常啟動了。
3.使用jpa的查詢
@1 要整合介面類JpaSpecificationExecutor, 該類提供了幾個方法
T findOne(Specification<T> spec);
List<T> findAll(Specification<T> spec);
Page<T> findAll(Specification<T> spec, Pageable pageable);
@2 具體的使用
<span> </span>Specification<User> spec = new Specification<User>() {
@Override
public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
Predicate p1 = cb.equal(root.get("userCategory").as(Integer.class), 2);
// 設定sql連結
Join<User, FactoryUser> fuJoin = root.join(root.getModel().getSingularAttribute("fu", FactoryUser.class), JoinType.INNER);
Predicate p2 = cb.equal(fuJoin.get("factoryId").as(Long.class), factoryIdFinal);
query.where(cb.and(p1, p2));
// 新增排序的功能
query.orderBy(cb.desc(root.get("id").as(Long.class)));
return query.getRestriction();
}
};
return userDao.findAll(spec);
待續
相關推薦
關於Spring-JPA框架下使用多表查詢的應用例項記錄
1.目的:記錄如何 用jpa來實現快速的多表查詢, 暫不深入探究jpa的內部實現 2. 說明情形: @1所涉及的表為t_user(id,name,date,...);t_factory_user(id,factory_id,user_id,...), 其中表s_factor
【JPA】關於JPA使用原生多表查詢,返回實體集合的方法 [@FiledResult]註解應用
執行 @NamedNativeQuery 時,它可以返回實體(包括不同型別的實體)、標量值或實體和標量值的組合。 預設情況下,JPA 持續性提供程式假設在使用 @EntityResult 返回實體時,SELECT 語句將包含與返回的實體的所有欄位或 屬性相對應的所有列,且S
SSH框架的多表查詢和增刪查改 (方法一)上
ips 查詢 href ssh margin blank 麻煩 tle 指點 原創作品,允許轉載,轉載時請務必標明作者信息和聲明本文章==》 http://www.cnblogs.com/zhu520/p/7772823.html 因為最近在做Android 練習
springMVC+spring+mybatis 框架下分頁查詢
一、Mapper.xml(xml) <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://
Hibernate框架之多表查詢
1、多表設計(總結) (1)多表關係 1)一對一: 表的設計原則(分表原則): 優化表的效能 基於語意化分表 一對一的兩張表 之間的關係
spring-data-JPA使用JpaRepository註解自定義SQL查詢資料庫多表查詢
一. 首先在@Entity註解的類裡面要寫好外來鍵關係. 這個 @ManyToOne 註解可以建立外來鍵關係, 不要在自己傻傻的寫一個 private int grades_id; 寫了這個註解以後它會自動的把 Classes 這張表加上 grades_id 欄位.
Spring data jpa 多表查詢(二:多表動態條件查詢)
上一章說完單表動態條件查詢,這章就說下多表關聯查詢 1、先說一對多關係,就以上一章的A模型和B模型,為例 A 對應 多個 B,而現在需求就是查詢A和B關聯,並需要傳入的動態引數,可能是A模型中的屬性,也有可能是B模型中的引數 還是用虛擬碼來說明,並且用的是Specifi
spring boot 學習心得 使用JpaRepository註解自定義SQL查詢數據庫多表查詢
自定義 net http entity onetomany tom pri 查詢語句 重點 一. 首先在@Entity註解的類裏面要寫好外鍵關系. 這個 @ManyToOne 註解可以建立外鍵關系, 不要在自己傻傻的寫一個 private int grades_id;
django下多表關聯查詢
mail 數據 com 相關 body 多表 兩個 obj author 實例:1、查詢作者的所有完整信息2、查詢《21天成為撩妹高手》這本書的作者和姓名3、查詢胡大海寫了一些什麽書4、查詢廣東人民出版社出版了一些什麽書籍5、查詢廣東人民出版社都有那些作者出過書 多表查詢技
hibernate框架學習之多表查詢helloworld
nat student 查詢 get span bsp object from ber package cn.itcast.h3.hql; import java.util.List; import org.hibernate.Query; import org.hi
MySql cmd下的學習筆記 —— 有關多表查詢的操作(多表查詢練習題及union操作)
image ins myisam name sam row div mysq gin 先建立一張 m 表 mysql> create table m ( -> mid int, -> hid int, -> gid in
Java框架-mybatis連線池、動態sql和多表查詢
1. mybatis連線池 通過SqlMapConfig.xml設定dataSource type實現連線池的配置 1.1 dataSource標籤type屬性值含義 type=”POOLED”: MyBatis 會建立 PooledDataSource 例項
雙下劃線多表查詢
1基於雙下劃線的跨表查詢 套路一樣,用__跨表 -一對多 -多對多 2 聚合查詢 -聚合函式 from django.db.models import Avg,Count,Max,Min,Sum # 計算所有圖書的平均價格 # ret=Book.objects.all().aggregate(Avg('pr
Hibernate-04 框架第四天 多表查詢的演示
package test; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; import org.hibernate.C
SSM框架學習-MyBatis篇 SQL對映檔案——實現高階結果對映和多表查詢
SSM框架學習-MyBatis篇 SQL對映檔案——實現高階結果對映(多表查詢) 問題情境:比如有張表,使用者和使用者詳情,這兩張表裡面沒長表都有一個id欄位,這兩個表的id欄位都是對應的。 實體類裡面分別對應兩個實體類,user和userdetail,還有一個很重要的實
Java Maven專案:spring boot + Mybatis連線MySQL,通用mapper的增刪改查,對映實現多表查詢
1. MySQL自帶庫test新增表user、role 角色表role 使用者表user 2. 新增依賴,配置屬性 相關依賴:百度即可,此處略 application.properties spring.application.name=clean-exe
SSM框架之MyBatis(二)--多表查詢及查詢結果對映
使用MyBatis這一強大的框架可以解決很多賦值的問題,其中對於子配置檔案中的小細節有很多需要注意的地方,使用這個框架後主要就是對於配置檔案的編寫和配置。 今天我寫了一個多表查詢,表的基本結構如下: 使用者表t_user:使用者編號uid,賬號account,暱稱nickn
SSM框架 Mybatis聯合查詢 多表查詢 分頁
這篇文章主要介紹了Java的MyBatis框架中實現多表連線查詢和查詢結果分頁,藉助MyBatis框架中帶有的動態SQL查詢功能可以比普通SQL查詢做到更多,需要的朋友可以參考下 Java的MyBatis框架中實現多表連線查詢和查詢結果分頁 實現多表聯合查詢
spring jdbcTemplate 使用佔位符(?)的query方法進行多表查詢
1 在spring 的配置檔案中applicationContext.xml中,配置service,dao.(前臺使用的是flex,把flex也配置上了。) <bean id="busSuperCapityAnalyDao" class="com.tm.dao.imp
同一個資料庫例項,不同使用者下多表建立檢視,Hibernate完成ORM對映,Spring整合,後臺實現
1、同一個資料庫例項,同用戶,多表建立檢視 2、同一個資料庫例項,不同使用者下,多表建立檢視 3、同一個資料庫,不同資料庫例項,多表建立檢視 4、不同型別資料庫,多表建立檢視 1、同一個資料庫例項,同用戶,多表建立檢視 暫缺!! 2、同一個資料庫例項,不同使