簡體   English   中英

Jpa + Hibernate連接獲取返回的不一致數據

[英]Jpa + Hibernate join fetch returning inconsistent data

我們正在通過JPA + Hibernate 4執行一個查詢,該查詢返回一些不一致的數據。

我們有一個“父”表:

PARENT
    id *
    req_num
    active
    creation_date

和一個“孩子”表:

CHILD
    id *
    type
    name
    email

一個父級可能有多個子級,並且使用另一個表將其映射到數據庫中:

PARENT_CHILDS
    parent_id (FK to PARENT)
    child_id (FK to CHILD)
    child_order

在Java中,我們的Parent類具有@OneToMany注釋列表,名為childs。 兩者都用@Entity注釋。 我們使用org.hibernate.cfg.ImprovedNamingStrategy作為我們的命名策略。

我們正在執行的查詢是:

select parent from Parent parent join fetch parent.childs child where child.type IN ('01', '02') and child.email = 'mail@mail.com' and parent.active = 1 and parent.reqNum != 'testReqNum'

這將轉換為下一個簡單的SQL查詢(我們正在使用show_sql = true屬性看到此查詢):

select parent0_.id as id2_, parent0_.active as active2_, parent0_.creation_date as creation2_
    from parent parent0_ 
    inner join parent_childs childs1_ on parent0_.id=childs1_.Application_id 
    inner join child child2_ on childs1_.child_id=child2_.id 
    where (child2_.type in (? , ?)) and child2_.email=? and parent0_.active=? and parent0_.req_num<>? 

我們的父表只有2個滿足條件“ parent0_.active =?和parent0_.req_num <>?”的父表。 他們每個人都有兩個孩子。 並且他們的孩子中只有一個滿足條件“((?,?)中的child2_.type)和child2_.email =?”。

因此,當我們直接對Oracle數據庫執行SQL查詢時,它僅返回2行(兩個父級,每個父級只有一個孩子)。

但是,在Java中,我們正在恢復一些奇怪的結果,如果我們使用“內部聯接”,“聯接”或“聯接獲取”,結果會有所不同。 例如,我們收到三個父母的清單。 一個帶着一個孩子,另一個帶着另一個不滿足郵件條件的孩子,最后一個帶着兩個孩子。

我們想知道為什么我們會遇到這種現象,更重要的是,我們如何解決呢?

謝謝。 親切的問候。

正如我在評論中提到的,實現您的解決方案不需要多對多的關系。 此外,您的鏈接表不是正確的鏈接表,因為它具有自己的ID,因此必須將其視為另一個實體。

如果您無法更改數據庫架構,則可以通過以下方式實現實體之間的關系:

  • 一個OneToMany的關系, ParentParentChild
  • ParentChildChildOneToOne關系

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM