1. 程式人生 > >JPA criteria 查詢:型別安全與面向物件

JPA criteria 查詢:型別安全與面向物件

序言

自工作以來,除了以前比較流量的hibernate,就是一直使用ORM 規範 JPA了.而這幾天工作需要,研究了下JPA的標準查詢,名為:JPA criteria查詢.相比JPQL,其優勢是型別安全,更加的面向物件.

使用標準查詢,開發人員可在編譯的時候就檢查查詢的正確與否.而以前也只是在Hibernate中聽說有過.具體不詳,沒用過.

JPA元模型概念,及使用

在JPA中,標準查詢是以元模型的概念為基礎的.元模型是為具體持久化單元的受管實體定義的.這些實體可以是實體類,嵌入類或者對映的父類.提供受管實體元資訊的類就是元模型類.

描述受管類的狀態和他們之間的關係的靜態元模型類可以

  • 1.從註解處理器產生
  • 2.從程式產生
  • 3.用EntityManager訪問.

如下code,一個簡單的實體類package com.demo.entities;下,實體類Employee ,假設該實體有諸如id,name和age的基本屬性,還有與類Address的OneToMany關聯:

01 @Entity
02 @Table
03 public class Employee{ 
04 private int id;  
05 private String name;
06 private int age;
07 @OneToMany
08 private List<Address> addresses;
09 // Other code…
10 }

Employee類(com.demo.entities包中定義)的標準元模型類的名字將是使用 javax.persistence.StaticMetamodel註解的Employee_

。元模型類的屬性全部是static和public的。Employee的每一個屬性都會使用在JPA2規範中描述的以下規則在相應的元模型類中對映:

  • 諸如id,name和age的非集合型別,會定義靜態屬性SingularAttribute<A, B> b,這裡b是定義在類A中的型別為B的一個物件。
  • 對於Addess這樣的集合型別,會定義靜態屬性ListAttribute<A, B> b,這裡List物件b是定義在類A中型別B的物件。其它集合型別可以是SetAttribute, MapAttribute 或 CollectionAttribute 型別。

 以下是用註解處理器產生的元模型類package com.demo.entities;下:

01 import javax.annotation.Generated;
02 import javax.persistence.metamodel.SingularAttribute;

相關推薦

JPA criteria 查詢:型別安全面向物件

序言 自工作以來,除了以前比較流量的hibernate,就是一直使用ORM 規範 JPA了.而這幾天工作需要,研究了下JPA的標準查詢,名為:JPA criteria查詢.相比JPQL,其優勢是型別安全,更加的面向物件. 使用標準查詢,開發人員可在編譯的時候就檢查查詢的正確與否.而以前

【新手向】面向過程面向物件的區別

 我大學的專業是跟硬體息息相關的自動化專業,因此最開始接觸的程式語言是C語言,典型的面向過程語言。後來自學java和前端的時候感覺和C差距還是蠻大的,“類”、“封裝”、“繼承”這些概念都不瞭解是什麼意思,教程讓怎麼用自己就怎麼寫,對“面向物件”和“面向過程”這兩個詞沒有概念,現在回顧一下這二

面向過程程式設計面向物件程式設計

1.面向過程程式設計   核心是過程二字,過程指的就是解決問題的不走,即先幹什麼再幹什麼後幹什麼...   基於該思想編寫程式就好比在設計一條流水線,是一種機械師的思維方式   優點:複雜的問題流程化,進而簡單化   缺點:可擴充套件性差 2.面向物件程式設計   核心是物件二字,物件是特徵與技能

Javascript object.constructor屬性面向物件程式設計(oop)

定義和用法 在 JavaScript 中, constructor 屬性返回物件的建構函式。 返回值是函式的引用,不是函式名: JavaScript 陣列 constructor 屬性返回 function Array() { [native code] } JavaScript 數字 co

UML面向物件技術基礎

UML 採用面向物件技術設計系統,從應用的角度看,首先是描述需求,其次根據需求建立系統的靜態模型,以構造系統的結構;最後描述系統的行為。UML的主要內容可以歸納為靜態建模機制和動態建模兩大類。 面向物件技術設計系統   UML圖

c++基礎的基礎:helloword,求圓面積。面向過程面向物件區別程式碼

#include "iostream"//包含c++的標頭檔案 using namespace std;//使用名稱空間std 標準的名稱空間(這裡面定義了很多變數等) void main01() {     //標準輸出 黑螢幕    

java學習筆記:二維陣列面向物件

目標: 二維陣列 面向物件程式設計 一、二維陣列 二維陣列就是一個元素為一維陣列的陣列。 格式1: 資料型別[][] 變數名 = new 資料型別[m][n]; m表示這個二維陣列有多少個一維陣列 n表示每一個數組的元素的元素個數 /*

Python 類面向物件

Python 類與面向物件 1,程式 = 指令 + 資料 ·程式碼可以選擇以指令為核心或以資料為核心進行編寫 2,兩種範型 ·以指令為核心:圍繞"正在發生什麼"進行編寫 1)面向過程程式設計:程式具有一系列性步驟;主體思想是程式碼作用於資料 ·以資料為核心:圍繞"將影響誰"進行

muduo基於物件程式設計風格[]面向物件程式設計風格對比

結論 muduo程式碼的實現是基於物件程式設計風格,使用boost bind/function,替代了mem_fun,ptr_fun,bind1st,bind2nd等函式 boost::bind的使用 示例:boost::bind能夠將一個函式介面,轉換為另一種函式介面

關係資料庫系統RDBMS面向物件資料庫管理系統ODBMS優缺點比較

關係資料庫系統與面向物件資料庫系統各自的優缺點 關係資料庫系統的優點 a.靈活性和建庫的簡單性:目前在多數RDDMS產品中使用標準查詢語言SQL,允許使用者幾乎毫無差別地從一個產品到另一個產品存取資訊。 b.結構簡單:從資料建模的前景看,關係資料庫具有相當

重新思考面向過程面向物件

目錄 面向過程與面向物件的思考方式 面向過程與面向物件的聯絡 如何選擇 參考 部落格:blog.shinelee.me | 部落格園 | CSDN 面向過程與面向物件的思考方式 面向過程和面向物件的差異主要體現在思考方式上,面對同樣一個任務, 面向過程的思考方式,首先想的是一步

面向過程面向物件的一點感悟

面向過程與面向物件的本質區別 一位計算機界的大師曾說過,“我認為,面向物件的目標從來都不是複用和擴充套件,而是提供一種處理複雜問題的方法”。 面向過程講究自頂向下逐步求精。找到一個系統的入口然後順藤摸瓜,分析出每一步以及影響這一步的其他因素,我們就能夠定義這個系統。 面

effective C++筆記--繼承面向物件設計(二)

文章目錄 絕不重新定義繼承而來的非虛擬函式 絕不重新定義繼承而來的預設引數值 通過複合塑模出has-a或“根據某物實現出” 明智而審慎地使用private繼承 明智而審慎地使用多重繼承 絕不重新定義繼承而來的非虛擬函式

effective C++筆記--繼承面向物件設計(一)

文章目錄 確定你的public繼承塑模is-a關係 避免遮掩繼承而來的名字 區分介面繼承和實現繼承 考慮virtual函式以外的其他選擇 由Non-Virtual Interface(NVI)手法實現Template Method模

Python-JS事件面向物件操作

目錄一、函式高階 迴圈繫結: 使用迴圈繫結會出現的問題及解決方案:二、面向物件 3、建構函式(ES5)三、JS選擇器 1、getElement系列(最嚴謹) 2、querySelector系列(最方便) 3、通過id名直接獲取 4.JS中操作頁面標籤全域性屬性,對映到

Effective C++之繼承面向物件設計

5.條款之避免繼承而來的名稱 int x; void someFunc() { double x; std::cin >> x; } 我們都知道上面這段程式碼會因為區域性變數的原因,輸入的x是double型別的 根據以上程式碼,我們來看看下面的類: #in

面向過程面向物件程式碼例項對比

面向過程式程式碼(使用資料結構的程式碼)便於在不改動既有資料結構的前提下新增新函式。 面向物件程式碼便於在不改動既有函式前提下新增新類。 過程式程式碼難以新增資料結構,因為必須修改所有函式。面向物件程式碼難以新增新函式,因為必須修改所有類。 這兩種定義的本

體會面向物件過程面向物件的程式設計思想

體會面向物件過程與面向物件的程式設計思想 加粗樣式 Document <script> // 初級面向物件思想 document.getElementById('btn').onclick=function(){ document.getElement

面向過程(面向結構)面向物件的區別

先說說結構化方法的主要思想: (1)功能的分解是一種遞迴定義。也就是說:第0層(代表整個系統)它只看得見 1,2,3,至於1,2,3各自自身怎麼實現,那不是它的事,而對於模組1來說,它只管1.1,1.2,1.3,它並不管1.11,1.12等.這種思維能讓我們每次聚焦在一個部位上,這個部位可能處於高層

java類例項化記憶體過程面向物件特徵

在談到類例項化的記憶體過程時先說說幾個概念: 物件:記憶體上來說是分配在堆上面的一塊記憶體區域 類:把一類具體事物相同特徵,功能/行為抽象為屬性與方法過程。 類是物件的模板,物件是類的具體表現。 建構函式:與類名同名的函式,用來例項化物件並初始化成員變數。 注意:構造器、建構函式不能稱為構造方法。 類的結