![](/img/trans.png)
[英]Hibernate - OneToMany UniDirectional Mapping - SQLGrammarException
[英]Child Entities Count in unidirectional @OneToMany mapping in hibernate
我正在一個項目中,兩個實體具有單向@OneToMany映射。 當我嘗試通過此查詢加載特定父ID的所有子實體時-
select p.childEntities from Parent p where p.id =:parentId
工作正常。 另請注意,這里我使用的是休眠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 "
然后僅獲取size()進行計數會導致性能損失。
概覽項目-父類-
@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;
}
}
我還有什么選擇?
您需要了解聯接(在SQL,BTW中也將使用聯接):
select count(c.id) from Parent p join p.childEntities c where p.id = :parentId
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.