2017-09-04 39 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?“。 –