欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Hibernate一對多和多對一關(guān)系詳解

雙向一對多關(guān)系,一是關(guān)系維護端(owner side),多是關(guān)系被維護端(inverse side)。在關(guān)系被維護端需要通過(guò)@JoinColumn建立外鍵列指向關(guān)系維護端的主鍵列。

publicclass Order implements Serializable {
    privateSet<OrderItem> orderItems = new HashSet<OrderItem>();
         。。。。
    @OneToMany(mappedBy="order",cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @OrderBy(value = "id ASC")
    public Set<OrderItem> getOrderItems() {
        returnorderItems;
     }
}
publicclass OrderItem implements Serializable {
private Order order;
。。。。
    @ManyToOne(cascade=CascadeType.REFRESH,optional=false)
    @JoinColumn(name = "order_id")
    public Order getOrder() {
        returnorder;
     }
}
@OrderBy(value = "id ASC") 指明加載OrderItem 時(shí)按id 的升序排序
@OneToMany的屬性
1>targetEntity
定義關(guān)系類(lèi)的類(lèi)型,默認是該成員屬性對應的類(lèi)類(lèi)型,所以通常不需要提供定義。
2>mappedBy
定義類(lèi)之間的雙向關(guān)系。如果類(lèi)之間是單向關(guān)系,不需要提供定義,如果類(lèi)和類(lèi)之間形成雙向關(guān)系,我們就需要使用這個(gè)屬性進(jìn)行定義,否則可能引起數據一致性的問(wèn)題。
該屬性的值是“多”方class里的“一”方的變量名
3>cascade
該屬性定義類(lèi)和類(lèi)之間的級聯(lián)關(guān)系。定義的級聯(lián)關(guān)系將被容器視為對當前類(lèi)對象及其關(guān)聯(lián)類(lèi)對象采取相同的操作,而且這種關(guān)系是遞歸調用的。舉個(gè)例子:Order OrderItem有級聯(lián)關(guān)系,那么刪除Order時(shí)將同時(shí)刪除它所對應的OrderItem對象。而如果OrderItem還和其他的對象之間有級聯(lián)關(guān)系,那么這樣的操作會(huì )一直遞歸執行下去。
cascade的值只能從CascadeType.PERSIST(級聯(lián)新建)、CascadeType.REMOVE(級聯(lián)刪除)、CascadeType.REFRESH(級聯(lián)刷新)、CascadeType.MERGE(級聯(lián)更新)中選擇一個(gè)或多個(gè)。還有一個(gè)選擇是使用CascadeType.ALL,表示選擇全部四項。
4>fatch
可選擇項包括:FetchType.EAGERFetchType.LAZY。前者表示關(guān)系類(lèi)(本例是OrderItem 類(lèi))在主類(lèi)(本例是Order類(lèi))加載的時(shí)候同時(shí)加載,后者表示關(guān)系類(lèi)在被訪(fǎng)問(wèn)時(shí)才加載。默認值是FetchType.LAZY。
@JoinColumn(name = "order_id")注釋指定OrderItem映射表的order_id列作為外鍵與Order 映射表的主鍵列關(guān)聯(lián)。
@ManyToOne:指明OrderItem和Order之間為多對一關(guān)系。
@ManyToOne注釋有四個(gè)屬性:targetEntity、cascade、fetch 和optional,前三個(gè)屬性的具體含義和@OneToMany的同名屬性相同,但@ManyToOne的fetch 屬性默認值是FetchType.EAGER。
optional屬性是定義該關(guān)聯(lián)類(lèi)是否必須存在,值為false 時(shí),關(guān)聯(lián)類(lèi)雙方都必須存在,如果關(guān)系被維護端不存在,查詢(xún)的結果為null。值為true 時(shí), 關(guān)系被維護端可以不存在,查詢(xún)的結果仍然會(huì )返回關(guān)系維護端,在關(guān)系維護端中指向關(guān)系被維護端的屬性為null。optional屬性的默認值是true。optional 屬性實(shí)際上指定關(guān)聯(lián)類(lèi)與被關(guān)聯(lián)類(lèi)的join 查詢(xún)關(guān)系,如optional=false 時(shí)join 查詢(xún)關(guān)系為inner join, optional=true 時(shí)join 查詢(xún)關(guān)系為left join。下面代碼片斷解釋如下:
有一點(diǎn)需要強調:當業(yè)務(wù)方法需要把一個(gè)實(shí)體Bean作為參數返回給客戶(hù)端時(shí),除了實(shí)體Bean本身需要實(shí)現Serializable 接口之外,如果關(guān)聯(lián)類(lèi)(OrderItem)是延遲加載,還需在返回實(shí)體Bean之前通過(guò)訪(fǎng)問(wèn)關(guān)聯(lián)類(lèi)的方式加載關(guān)聯(lián)類(lèi)(見(jiàn)下例)。否則在客戶(hù)端訪(fǎng)問(wèn)關(guān)聯(lián)類(lèi)時(shí)將會(huì )拋出加載例外。
    public Order getOrderByID(Integer orderid) {
        Order order = em.find(Order.class, orderid);        
       //!!!!!因為是延遲加載,通過(guò)執行size()這種方式獲取訂單下的所有訂單項
        order.getOrderItems().size();
       return order;
     }
另外不管是否延遲加載,通過(guò)join fetch 關(guān)聯(lián)語(yǔ)句都可顯式加載關(guān)聯(lián)類(lèi),如下例:
    public List getAllOrder() {
         Query query = em.createQuery("select DISTINCT o from Order o inner
join fetch o.orderItems order by o.orderid");
         List result = query.getResultList();
        return result;
     }
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
UML 完全解析和總結
UML-依賴(lài)與關(guān)聯(lián)
Ae:父圖層和子圖層
Java學(xué)習路線(xiàn)分享mybatis映射
Hibernate Lazy機制(說(shuō)得比較全)
UML 類(lèi)圖
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久