傳智播客 JPA的關係對映和JPQL查詢

2021-05-21 14:06:18 字數 3358 閱讀 5248

通過昨天的學習和晚上上自習時候的練習對 jpa 有了一定的了解,對學好 jpa 有了很大的信心.呵呵...在學一門新技術的時候,總是感覺它很難可能學不會.這技術有多高深啊,不好掌握.可是每次學完了回頭一看,又感覺原來如此啊, 其實不是想的那樣.哈哈...還是經驗少啊.下面對今天的學習內容總結一下.

1.關係對映

1)多對一

manytoone(@manytoone)

class order

@entity

@discriminatorvalue(value=「he")

public class he extends employee

@entity

@discriminatorvalue(value=「se")

public class se extends employee

3.實體狀態:

四種狀態

new (transient): 建立出來沒關聯,沒有id,沒有記錄

managed (persistent): 和當前context關聯的實體

detached: 有id,但不和上下文關聯(evict).

removed: 有id,不和上下文關聯,計畫從庫中刪除.

4.持久化相關操作

em.persist(fritz);

em.find( cat.class, new long(catid) );

em.getreference(parent.class, parentid);

em.flush();

em.refresh(cat);

entitymanager.find(seller.class, sellerid);

聯合主鍵檢索:

sellerpk sellerkey = new sellerpk();

sellerkey.setfirstname(firstname);

sellerkey.setlastname(lastname);

seller seller = entitymanager.find(seller.class, sellerkey);

更新實體

o o = em.find(..)

o.set***(..);

新增實體:

em.persist(..);

合併實體:

em.merge(..);//更新游離物件

刪除實體

entitymanager.remove(entitymanager.merge(order));

remove只操作託管的實體,如果傳遞乙個游離實體的話,將丟擲非法引數異常.

@onetomany(cascade=cascadetype.remove)//級聯刪除

//flush控制清理

em.setflushmode(flushmodetype.commit);

em.flush();

//refresh

em.refresh(entity);

5.jpql查詢

1)簡單查詢 :

query query = em.createquery("select c from customer c");

return query.getresultlist();

2)命名查詢

@entity

@namedquery(name = "findcustomerbyname",

query = "select c from customer c

where c.name

like :name ")

class category

//定義多個命名查詢條件

@namedqueries();

em.createnamedquery("findallcustomers")

3)分頁

query = em.createnamedquery("findcustomerbyname");

query.setparameter("name", "t,om");

query.setmaxresults(10);

query.setfirstresult(3);

list customers = query.getresultlist();

4)設定引數:

select o from order i where i.orderno = ?1

query.setparameter(1, 100.00);

select o from order i where o.price = :price

query.setparameter("price", 100.00);

5)單個實體檢索

query.getsingleresult();

6)使用實體名

@entity(name = "customerentity")

public class category

from customerentity [as] c

7)查詢集合 :

where c.orders is empty

where concat(c.fname, c.lname) = 't,om'

select c.id, c.name from customer c

8)多型查詢

select c from customer c where c.name like :name

9)分組

select o.customer, count(o.id) from order o group by o.customer

10)排序

order by

11)子查詢

select o from order i where o.customer in

(select c from customer c where c.name like ?1)

12)連線

select o,c from order o, customer c where o.customer.id = c.id

select o from order o [inner] join o.customer //內連線

select c from customer c left outer join c.orders//外連線

select c from customer c fetch join c.orders//迫切連線

13)批量更新/刪除

update customer c set c.age = ?1 where c.id >=?2

query.setparameter(1, 12);

query.setparameter(2, 5);

int results = query.executeupdate();

傳智播客mysql分頁的實現 傳智播客 分頁

整理了一宿,終於找到了頭緒,在頭腦還算清醒時,整理下分頁的筆記.我這個分頁用的是oracle的資料庫.他在查詢時涉及到了乙個偽列.table名為 employees.建立bean物件employee.屬性如下 private int employee id private string first ...

多執行緒的概述和狀態 傳智播客

public class a public class basic 輸出的結果中,main over在任意一行中都是可能的 main over finalize called finalize called finalize called 二.執行緒的狀態 執行緒狀態主要有5個狀態,分別是建立 就緒...

執行緒間的通訊和執行緒排程 傳智播客

一.執行緒間的通訊 1.多個執行緒操作共享資源,但是任務不一樣 class resourcecatch interruptedexception e this.name name num system.out.println thread.currentthread getname 生產了 this...