<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-124  評論-194  文章-0  trackbacks-0

    以下文字摘自:JOINJOIN2, HQL, Fetch

    Join用法:

    主要有Inner Join 及 Outer Join:

     

    最常用的(默認(rèn)是Inner):

    Select <要選擇的字段> From <主要資料表>

      <Join 方式> <次要資料表> [On <Join 規(guī)則>]

    Inner Join 的主要精神就是 exclusive , 叫它做排他性吧! 就是講 Join 規(guī)則不相符的資料就會被排除掉, 譬如講在 Product 中有一項(xiàng)產(chǎn)品的供貨商代碼 (SupplierId), 沒有出現(xiàn)在 Suppliers 資料表中, 那么這筆記錄便會被排除掉

     

    Outer Join:

    Select <要查詢的字段> From <Left 資料表>

      <Left | Right> [Outer] Join <Right 資料表> On <Join 規(guī)則>

     

    語法中的 Outer 是可以省略的, 例如你可以用 Left Join 或是 Right Join, 在本質(zhì)上, Outer Join 是 inclusive, 叫它做包容性吧! 不同于 Inner Join 的排他性, 因此在 Left Outer Join 的查詢結(jié)果會包含所有 Left 資料表的資料, 顛倒過來講, Right Outer Join 的查詢就會包含所有 Right 資料表的資料

     

    另外,還有全外聯(lián):

    FULL JOIN 或 FULL OUTER JOIN

    完整外部聯(lián)接返回左表和右表中的所有行。當(dāng)某行在另一個表中沒有匹配行時,則另一個表的選擇列表列包含空值。如果表之間有匹配行,則整個結(jié)果集行包含基表的數(shù)據(jù)值。

     

    以及,

    交叉聯(lián)接

    交叉聯(lián)接返回左表中的所有行,左表中的每一行與右表中的所有行組合。交叉聯(lián)接也稱作笛卡爾積。

    沒有 WHERE 子句的交叉聯(lián)接將產(chǎn)生聯(lián)接所涉及的表的笛卡爾積。第一個表的行數(shù)乘以第二個表的行數(shù)等于笛卡爾積結(jié)果集的大小。也就是說在沒有 WHERE 子句的情況下,若表 A 有 3 行記錄,表 B 有 6 行記錄 : :

    SELECT A.*,B.* FROM 表A CROSS JOIN 表B

    那以上語句會返回 18 行記錄。

     

     

    Fetch:

    在我們查詢Parent對象的時候,默認(rèn)只有Parent的內(nèi)容,并不包含childs的信息,如果在Parent.hbm.xml里設(shè)置lazy="false"的話才同時取出關(guān)聯(lián)的所有childs內(nèi)容.
    問題是我既想要hibernate默認(rèn)的性能又想要臨時的靈活性該怎么辦?  這就是fetch的功能。我們可以把fetch與lazy="true"的關(guān)系類比為事務(wù)當(dāng)中的編程式事務(wù)與聲明式事務(wù),不太準(zhǔn)確,但是大概是這個意思。
    總值,fetch就是在代碼這一層給你一個主動抓取得機(jī)會.

    Parent parent = (Parent)hibernateTemplate.execute(new HibernateCallback() {
    public Object doInHibernate(Session session) throws HibernateException, SQLException {
                    Query q = session.createQuery(
    "from Parent as parent "+
    " left outer join fetch parent.childs " +
    " where parent.id = :id"
                    );
                    q.setParameter("id",new Long(15));
    return (Parent)q.uniqueResult();
                }
            });
            Assert.assertTrue(parent.getChilds().size() > 0);

    你可以在lazy="true"的情況下把fetch去掉,就會報異常. 當(dāng)然,如果lazy="false"就不需要fetch了

     

     

    HQL一些特色方法:

    in and between may be used as follows:

    from DomesticCat cat where cat.name between 'A' and 'B'
    from DomesticCat cat where cat.name in ( 'Foo', 'Bar', 'Baz' )

    and the negated forms may be written

    from DomesticCat cat where cat.name not between 'A' and 'B'
    from DomesticCat cat where cat.name not in ( 'Foo', 'Bar', 'Baz' )

    Likewise, is null and is not null may be used to test for null values.

    Booleans may be easily used in expressions by declaring HQL query substitutions in Hibernate configuration:

    <property name="hibernate.query.substitutions">true 1, false 0</property>

    This will replace the keywords true and false with the literals 1 and 0 in the translated SQL from this HQL:

    from Cat cat where cat.alive = true

    You may test the size of a collection with the special property size, or the special size() function.

    from Cat cat where cat.kittens.size > 0
    from Cat cat where size(cat.kittens) > 0

    For indexed collections, you may refer to the minimum and maximum indices using minindex and maxindex functions. Similarly, you may refer to the minimum and maximum elements of a collection of basic type using the minelement and maxelement functions.

    from Calendar cal where maxelement(cal.holidays) > current_date
    from Order order where maxindex(order.items) > 100
    from Order order where minelement(order.items) > 10000

    The SQL functions any, some, all, exists, in are supported when passed the element or index set of a collection (elements and indices functions) or the result of a subquery (see below).

    select mother from Cat as mother, Cat as kit
    where kit in elements(foo.kittens)
    select p from NameList list, Person p
    where p.name = some elements(list.names)
    from Cat cat where exists elements(cat.kittens)
    from Player p where 3 > all elements(p.scores)
    from Show show where 'fizard' in indices(show.acts)

    Note that these constructs - size, elements, indices, minindex, maxindex, minelement, maxelement - may only be used in the where clause in Hibernate3.

    Elements of indexed collections (arrays, lists, maps) may be referred to by index (in a where clause only):

    from Order order where order.items[0].id = 1234
    select person from Person person, Calendar calendar
    where calendar.holidays['national day'] = person.birthDay
        and person.nationality.calendar = calendar
    select item from Item item, Order order
    where order.items[ order.deliveredItemIndices[0] ] = item and order.id = 11
    select item from Item item, Order order
    where order.items[ maxindex(order.items) ] = item and order.id = 11

    The expression inside [] may even be an arithmetic expression.

    select item from Item item, Order order
    where order.items[ size(order.items) - 1 ] = item

    HQL also provides the built-in index() function, for elements of a one-to-many association or collection of values.

    select item, index(item) from Order order 
        join order.items item
    where index(item) < 5

    Scalar SQL functions supported by the underlying database may be used

    from DomesticCat cat where upper(cat.name) like 'FRI%'
    posted on 2007-07-26 16:44 我愛佳娃 閱讀(33587) 評論(1)  編輯  收藏 所屬分類: DB相關(guān)

    評論:
    # re: Join用法,HQL的方法,Hibernate中的fetch 2008-06-10 17:31 | jdlsfl
    不錯  回復(fù)  更多評論
      
    主站蜘蛛池模板: 国产亚洲精品xxx| 一级毛片免费视频网站| 亚洲精华液一二三产区| 成人无码视频97免费| 在线播放免费人成视频在线观看| 中文字幕专区在线亚洲| 亚洲国产精品成人综合色在线婷婷| 免费手机在线看片| 成年女人免费视频播放77777| 亚洲图片一区二区| 中文字幕无码免费久久9一区9| 中文字幕不卡亚洲| 美女羞羞喷液视频免费| 久久精品免费一区二区喷潮 | 无码人妻一区二区三区免费手机| 亚洲视频在线一区二区| 亚洲avav天堂av在线网毛片| 毛片免费全部播放无码| 亚洲成AV人片一区二区| 一区二区三区免费看| 亚洲精品卡2卡3卡4卡5卡区| 美丽姑娘免费观看在线观看中文版 | 亚洲人成人77777网站| 精品国产_亚洲人成在线| 久久这里只有精品国产免费10| 亚洲精品国产高清在线观看| 亚洲国产一区二区三区| 永久免费无码网站在线观看个| 国产又长又粗又爽免费视频| 亚洲国产精品美女久久久久| 亚洲精品无码久久不卡| 无码人妻一区二区三区免费看 | 啦啦啦完整版免费视频在线观看| 亚洲精品无码久久久久秋霞| 免费a级毛片高清视频不卡| 国产精品亚洲综合网站| 免费成人午夜视频| 色哟哟国产精品免费观看| 亚洲av片劲爆在线观看| 最近2019免费中文字幕视频三| 亚洲综合婷婷久久|