【正文】
。 int result = ()。redsoft39。 int result = ()。 (Batch Remove)JPQL支持批量刪除。 (newvender, barVender)。foo39。fooPart39。 批量更新(Batch Update)JPQL支持批量更新。 // 直接把address對象作為參數(shù)。 final Query query = ( select o from Order o where = ?1 order by )。由于使用了fetch,這個查詢只會產(chǎn)生一條SQL語句,比原來需要N+1條SQL語句在性能上有了極大的提升。 // 返回所有地址為2000的Order紀錄,Order中必須有OrderItem final Query query = ( select o from Order o inner join fetch where =2000 order by )。為了查詢N個Order,我們需要一條SQL語句獲得所有的Order的原始/對象屬性, 但需要另外N條語句獲得每個Order的orderItems集合屬性。 // 這時獲得Order實體中orderItems( 集合屬性變量 )為空 final Order order = (Order)( 0 ) // 當應(yīng)用需要時,EJB3 Runtime才會執(zhí)行一條SQL語句來加載屬于當前Order的OrderItems Collection orderItems = ()。 // 默認JPQL編譯后不關(guān)聯(lián)集合屬性變量(orderItems)對應(yīng)的表 final Query query = ( select o from Order o inner join where =2000 order by )。 left/left out/inner join fetch提供了一種靈活的查詢加載方式來提高查詢的性能。 需要顯式使用left join/left outer join的情況會比較少。這樣的查詢和以下的JPQL其實是等價的。 // 返回所有地址為2000的Order紀錄,不管Order中是否有OrderItem final Query query = ( select o from Order o left join where =2000 order by )。 inner join 因此JPQL仍然支持和SQL中類似的關(guān)聯(lián)語法: 當這個句JPQL編譯成以下的SQL時就會自動包含了關(guān)聯(lián),JPQL編譯成SQL時關(guān)聯(lián)默認取左關(guān)聯(lián)(left join)。 關(guān)聯(lián)(join)在JPQL中,大部分的情況下,使用對象屬性都隱含了關(guān)聯(lián)(join)。 ( 1, foo )。foo39。 在HAVING語句里可以跟WHERE語句一樣使用參數(shù)。foo39。foo39。 如果還需要加上查詢條件,需要使用HAVING條件語句而不是WHERE語句。GROUP BY應(yīng)該包含select語句中除了聚合函數(shù)外的所有屬性。)。 聚合函數(shù)也可以作為被查詢的一個屬性返回。 // 由于Order中id的類型為long, final Long max = (Long)result。)。 MIN final Query query = ( select MAX( ) from Order where =39。 COUNT AVG 聚合查詢(Aggregation)象大部分的SQL一樣,JPQL也支持查詢中的聚合函數(shù)。 該java class不需要是Entity Class。 Query query = (select new ( , , ) FROM Order AS o)。 查詢中使用構(gòu)造器(Constructor)JPQL支持將查詢的屬性結(jié)果直接作為一個java class的構(gòu)造器參數(shù),并產(chǎn)生實體作為結(jié)果返回。 String customerName = row[1].toString()。 // 第一個行 Object[] row = ( 0 )。 // 直接查詢我們感興趣的屬性(列) final Query query = ( select , , from Order o order by )。JPQL也允許我們直接查詢返回我們需要的屬性,而不是返回整個Entity。// desc為降序 final Query query = ( select o from Order o order by , )。 // 不注明的話,默認為asc為升序, final Query query = ( select o from Order o order by )。 排序(order by)下面是一個簡單查詢的例子,可以看到和SQL的使用方法很類似。 ( 2, foo )。 // 可以使用多個參數(shù) final Query query = ( select o from Order o where = ?1 and = ?2 )。 // 設(shè)置查詢中的參數(shù) ( 1, 2 )。 ( customerName, foo )。 // 可以使用多個參數(shù) final Query query = ( select o from Order o where = :myId and = :customerName )。 final Query query = ( select o from Order o where = :myId)。JPQL支持兩種方式的參數(shù)定義方式: 命名參數(shù)和位置參數(shù)。注意條件語句中查詢的是Entity的屬性,屬性的名字需要和Entity中的屬性變量名字一致。 // address是Order類上的一個對象變量屬性,Address有一個streetNumber的屬性final Query query = ( select o from Order o where = 123 )。foo39。 )。 final Query query = ( select o from Order o where = 1 and = 39。 final Query query = ( select o from Order o where = 1)。 final Iterator iterator = ()。 // 關(guān)閉對查詢結(jié)果的緩存 ( , false)。注意關(guān)閉對集合結(jié)果的緩存。但如果在下次查詢操作之前,有針對被緩存的Entity類進行update/insert/delete操作,則緩存的結(jié)果集合會自動被清空,這樣下次查詢就會從數(shù)據(jù)庫獲得數(shù)據(jù), 確保查詢總是獲得正確的結(jié)果,避免緩存臟數(shù)據(jù)。 如果查詢結(jié)果結(jié)合中包含所有符合條件的Entity, EJB3 Persistence運行環(huán)境默認會自動緩存每次查詢的結(jié)果。 在同一個EntityManagerFactory中,不允許同時有兩個Abstract Schema Type相同的Entity類。Order schema Type。 final Iterator iterator = ()。 final Query query = ( select o from Order o)。 public Query createQuery(String ejbqlString)?! ? Query接口。比起EJB ,EJB3可以運行期構(gòu)造,支持多態(tài),遠遠比EJB 。 JPA QueryJPA的查詢語言(JP)是一種和SQL非常類似的中間性和對象化查詢語言。5. // mit后father中的被修改的內(nèi)容會同步到數(shù)據(jù)庫。 // 附合( merge )需要在事務(wù)中進行 ().begin()。