2017-09-04 124 views
0

我正在一個項目中兩個實體有單向@OneToMany映射。 當我試圖加載特定父ID的所有子實體與此查詢 -子實體計數在單向@OneToMany映射休眠

select p.childEntities from Parent p where p.id =:parentId

它工作正常。另外請注意,在這裏我使用hibernate api進行分頁,因此我只得到10,25 ...個記錄。 在很多方面,我只需要計數實體。 現在,我想這個飽受質疑

select count(p.childEntities) from Parent p where p.id =:parentId 

其失敗,ORACLE錯誤代碼加載所有子實體僅數 - ORA-00936:缺少表達

我的情況(這個項目低權限) - 我無法將實體映射更改爲雙向。並沒有使用原生SQL。 此外,我認爲,讓使用所有列表 -

" select p.childEntities from Parent p where p.id =:parentId "

然後剛開大小()進行計數性能昂貴。

映射的項目 - 父一瞥講座

@Entity 
@Table(name = "PARENT") 
public class Parent implements Serializable{ 

    private static final long    serialVersionUID  = 2232715856164345328L; 

    private Long id; 

    private String first; 

    private String second; 

    private String third; 

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) 
    @JoinColumn(name = "parent_id") 
    private List<Child> childEntities; 


    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    public String getFirst() { 
     return first; 
    } 

    public void setFirst(String first) { 
     this.first = first; 
    } 

    public String getSecond() { 
     return second; 
    } 

    public void setSecond(String second) { 
     this.second = second; 
    } 

    public String getThird() { 
     return third; 
    } 

    public void setThird(String third) { 
     this.third = third; 
    } 

    public List<Child> getChildEntities() { 
     return childEntities; 
    } 

    public void setChildEntities(List<Child> childEntities) { 
     this.childEntities = childEntities; 
    } 

    public static long getSerialversionuid() { 
     return serialVersionUID; 
    } 

} 

與子女講座

@Entity 
@Table(name = "Child") 
public class Child { 

    private Long id; 

    private Integer number; 

    private String prop1; 

    private String prop2; 

    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    public Integer getNumber() { 
     return number; 
    } 

    public void setNumber(Integer number) { 
     this.number = number; 
    } 

    public String getProp1() { 
     return prop1; 
    } 

    public void setProp1(String prop1) { 
     this.prop1 = prop1; 
    } 

    public String getProp2() { 
     return prop2; 
    } 

    public void setProp2(String prop2) { 
     this.prop2 = prop2; 
    } 
} 

什麼我留下所有的選擇?

回答

1

您需要了解聯接(它是什麼,你也將在SQL中使用,BTW):

select count(c.id) from Parent p join p.childEntities c where p.id = :parentId 
+0

這個答案不僅解決了我的問題也是它清除我的doubt-「當/爲什麼我需要加入Hibernate?「。 –