1. 程式人生 > >關於Spring-JPA框架下使用多表查詢的應用例項記錄

關於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、同一個資料庫例項,不同使