Hql join 和 group by 问题
我正在尝试在 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: 非法尝试取消引用 集合 [bean10_.bean1_id.bean2] 带有元素属性引用 [bean2_id]
我真正想要得到的是在给定 bean1_id 的同一个 bean1 中重复了多少个 bean2_id。
我的方式正确吗?休眠3.6.0 提前致谢
I am trying to make a query in hql. I have these beans:
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;
}
}
And the query:
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"
);
But I am getting this exception:
org.springframework.orm.hibernate3.HibernateQueryException:
illegal attempt to dereference
collection
I tried anothe query:
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=?");
Another exception:
org.springframework.orm.hibernate3.HibernateQueryException:
illegal attempt to dereference
collection [bean10_.bean1_id.bean2]
with element property reference
[bean2_id]
What I really want to get is how many bean2_id are repeated in the same bean1 with a bean1_id given.
Am I in the right way?? Hibernate 3.6.0
Thanks in advance
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果我正确理解你的问题,你应该这样做:
但是,这可能行不通,因为你必须将选择中的某些内容放入组中。
但以下应该可行:
如果您想获取 b1,但要按 b2.id 进行分组,您可以尝试如下操作:
请注意,您将在结果中获得 Bean1 位于索引 0 处的数组。
If I understand correctly your question, you should do something like this:
However, this will probably won't work, since you must put in group by something from the select.
But the following should work:
If you want to fetch b1, but to group by b2.id, you can try something like this:
Pay attention that you'll get array in the result with Bean1 at index 0.