【正文】
0].toString() )。 // 我們把需要的三個(gè)屬性作為一個(gè)class( OrderHolder )的構(gòu)造器參數(shù),并使用new函數(shù)。new要求java class使用全名。 SUM foo39。 // 在一些數(shù)據(jù)庫中max函數(shù)返回的結(jié)果的類型不一定于id對(duì)應(yīng)的列的類型相符,更安全的方式可以采用string來轉(zhuǎn)型 fina long max = ( () )。 和SQL一樣,如果聚合函數(shù)不是select...from的唯一一個(gè)返回列,需要使用GROUP BY語句。 // 返回所有的訂單的生產(chǎn)廠商是foo的貨物號(hào)碼和每種貨物的訂單價(jià)值總額 // 這里having = 39。)。為條件 final Query query = ( select , , sum() FROM Order o group by , having =?1)。例如在以下查詢中: final Query query = ( select o from Order o where =2000 order by )。 left out join/left join 由于JPQL默認(rèn)采用left join。inner join要求右邊的表達(dá)式必須返回Entities。 // 默認(rèn)JPQL編譯后不關(guān)聯(lián)集合屬性變量(orderItems)對(duì)應(yīng)的表 final Query query = ( select o from Order o inner join where =2000 order by )。為了查詢N個(gè)Order,我們需要一條SQL語句獲得所有的Order的原始/對(duì)象屬性, 但需要另外N條語句獲得每個(gè)Order的orderItems集合屬性。在查詢中使用參數(shù)查詢時(shí),參數(shù)類型除了String, 原始數(shù)據(jù)類型( int, double等)和它們的對(duì)象類型( Integer, Double等),也可以是Entity的實(shí)例。 ( 1, address )。 where = 39。 // update的記錄數(shù) int result = ()。 Query query = (DELETE FROM Order AS o WHERE =39。 。)。 Query query = (DELETE FROM Order)。)。 Query query = (update Order as o set =:newvender, =39。 final Address address = new Address( 2001, foo street, foo city, foo province )。 // 返回所有地址為2000的Order紀(jì)錄,Order中必須有OrderItem final Query query = ( select o from Order o inner join fetch where =2000 order by )。 // 這時(shí)獲得Order實(shí)體中orderItems( 集合屬性變量 )為空 final Order order = (Order)( 0 ) // 當(dāng)應(yīng)用需要時(shí),EJB3 Runtime才會(huì)執(zhí)行一條SQL語句來加載屬于當(dāng)前Order的OrderItems Collection orderItems = ()。 left/left out/inner join fetch提供了一種靈活的查詢加載方式來提高查詢的性能。 // 返回所有地址為2000的Order紀(jì)錄,不管Order中是否有OrderItem final Query query = ( select o from Order o where =2000 order by )。 left join/inner join fetch left join, left out join等義,都是允許符合條件的右邊表達(dá)式中的Entiies為空。 select , , , , , from orderTable as o left join addressTable where = 2000 但在一些情況下,我們?nèi)匀恍枰獙?duì)關(guān)聯(lián)做精確的控制。 final List result = ()。 // 返回所有的訂單的生產(chǎn)廠商是foo的貨物號(hào)碼和每種貨物的訂單價(jià)值總額 // 這里having = 39。為條件 final Query query = ( select , , sum() FROM Order o group by , having =39。 // 返回所有的訂單的生產(chǎn)廠商的的名字,貨物號(hào)碼和每種貨物的訂單價(jià)值總額 // 注意group final Query query = ( select , , sum() FROM Order o group by ,)。 // 返回所有的訂單的生產(chǎn)廠商和他們的訂單價(jià)值總額 final Query query = ( select , sum() FROM Order o group by )。 // 如果我們知道結(jié)果是單個(gè),我們可以用getSingleResult()獲得結(jié)果 final Object result = ()。 MAX 目前EJB QL支持的聚合函數(shù)包括: // 集合中的結(jié)果是OrderHolder List result = ()。 String streetNumber = ( row[2].toString() )。 // 集合中的不再是Order,而是一個(gè)Object[]對(duì)象數(shù)組 final List result = ()。 查詢部分屬性在前面的例子中,都是對(duì)針對(duì)Entity類的查詢,返回的也是被查詢的Entity類的實(shí)體。ASC和DESC分別為升序和降序,如果不顯式注明,JPQL中默認(rèn)為asc升序。 // 設(shè)置查詢中的參數(shù) ( 1, 2 )。 final Query query = ( select o from Order o where = ?1)。 // 設(shè)置查詢中的參數(shù) ( myId, 2 )。 使用參數(shù)查詢參數(shù)查詢也和SQL中的參數(shù)查詢類似。foo39。 final Query query = ( select o from Order o where = 1 and = 39。 final List result = ()。有時(shí)候查詢會(huì)返回海量的數(shù)據(jù)?! ?Query返回一個(gè)List的集合結(jié)果,( int )的方法來獲得每個(gè)符合條件的Entity。 while( () ){ // 處理Order }注意from Order。 下面我們做一個(gè)最簡(jiǎn)單的查詢。在程序中使用JPQL可以使用大寫(SELECT)或者小寫(select),但不要大小寫(比如:Select)混合使用。 ().mit()。 // 在稍后的,我們可以將father重新附和到一個(gè)新的或者原來的EntityManager中 EntityManager newEntityManager = ()。 EntityManager entityManager = ()。 // 提交事務(wù),剛才的更新同步到數(shù)據(jù)庫 ()。 Father father = ( , 1 )。 ( newSon )。 ()。 /* * 或者,可以用Entity名字作為查找。