[英]Hql join and group by problem
我想在hql中進行查詢。 我有這些豆子:
Bean1
@Entity
@Table(name = "bean1")
public class Bean1 {
...
private List<Bean2> bean2;
...
@ManyToMany(
cascade={CascadeType.ALL},
fetch=FetchType.LAZY)
@JoinTable(
name="bean1_bean2",
joinColumns=@JoinColumn(name="bean1_id"),
inverseJoinColumns=@JoinColumn(name="bean2_id")
)
public List<Bean2> getBean2() {
return bean2;
}
public void setTags(List<Bean2> bean2) {
this.bean2 = bean2;
}
...
}
Bean2
@Entity
@Table(name = "bean2")
public class Bean2 {
private String bean2_id;
private List<Bean1> bean1;
@Id
@Column(name = "bean2_id", length = 100, unique = true, nullable = false)
public String getBean2_id() {
return bean2_id;
}
public void setBean2_id(String bean2_id) {
this.bean2_id = bean2_id;
}
@ManyToMany(
cascade = {CascadeType.PERSIST, CascadeType.MERGE},
fetch=FetchType.LAZY,
mappedBy = "bean2"
)
public List<Bean1> getBean1() {
return bean1;
}
public void setBean1(List<Bean1> bean1) {
this.bean1 = bean1;
}
}
和查詢:
Query query = session.createQuery("SELECT bean1 FROM " +
((Class) Bean1.class.getName() + " bean1 " +
" WHERE " + "bean1.bean1_id=? " +
" JOIN bean1.bean2.bean2_id=?" +
" GROUP BY bean1.bean2"
);
但是我得到了這個例外:
org.springframework.orm.hibernate3.HibernateQueryException:非法嘗試取消引用集合
我嘗試了另一個查詢:
Query query = session.createQuery("SELECT beab1.bean2 FROM " + ((Class) Bean1.class.getName() + " bean1 " + " JOIN bean1.bean2 " + "bean2" + " WHERE " + "bean1.bean1_id=? " + " AND bean2.bean2_id=? " + " group by bean1.bean2.bean2_id=?");
另一個例外:
org.springframework.orm.hibernate3.HibernateQueryException:非法嘗試使用元素屬性引用[bean2_id]取消引用集合[bean10_.bean1_id.bean2]
我真正想要得到的是在給定bean1_id的同一個bean1中重復了多少bean2_id。
我做對了嗎? Hibernate 3.6.0在此先感謝
如果我理解你的問題,你應該這樣做:
select b1 from Bean1 as b1 join b1.bean2 as b2 where b1.id = ?1 and b2.id= ?2 group by b2.id
但是,這可能不會起作用,因為您必須通過select中的某些內容進行分組。
但以下應該有效:
select b2.id from Bean1 as b1 join b1.bean2 as b2 where b1.id = ?1 and b2.id= ?2 group by b2.id
如果你想獲取b1,但要按b2.id分組,你可以嘗試這樣的事情:
select b1, b2.id from Bean1 as b1 join b1.bean2 as b2 where b1.id = ?1 and b2.id= ?2 group by b2.id
請注意,您將在Bean1的索引為0的結果中獲得數組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.