2017-09-04 6 views
0

2つのエンティティが一方向@OneToManyマッピングを持つプロジェクトを作成しています。 私はこのクエリで特定の親IDのためのすべての子エンティティをロードしようとしたとき -子エンティティは、休止状態の単方向@OneToManyマッピングでカウントします

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

それは正常に動作します。また、ここではページングのためにhibernate apiを使用しているので、10、25 ...レコードしか得られないことに注意してください。 多くの点で私はエンティティの数だけを必要とします。行方不明の式

私の状況(このプロジェクトのための低権限):ORA-00936 - は、今私は、これはOracleエラー・コードで失敗し

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

をquery-とすべての子実体のカウントのみをロードしようとしています - エンティティのマッピングを双方向に変更できません。ネイティブ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で使用する何である)加入について学ぶ必要があります。

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

この答えだけでなく、私の問題は、それがなぜ必要なのですか/私のdoubt-」をクリアして解決Hibernateに参加しますか? " –

関連する問題