通過昨天的學習和晚上上自習時候的練習對 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...