【问题标题】:Hql join and group by problemHql加入并按问题分组
【发布时间】:2011-06-01 00:29:21
【问题描述】:

我正在尝试在 hql 中进行查询。我有这些豆子:

豆1

@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;
    }


    ...
    }

豆2

@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 中重复了多少个 bean2_id 并给出了 bean1_id。
我走对了吗??休眠 3.6.0 提前致谢

【问题讨论】:

    标签: java hibernate hql


    【解决方案1】:

    如果我理解正确你的问题,你应该这样做:

    select b1 from Bean1 as b1 join b1.bean2 as b2 where b1.id = ?1 and b2.id= ?2 group by b2.id
    

    但是,这可能行不通,因为您必须通过选择中的某些内容进行分组。

    但以下应该有效:

    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
    

    请注意,您将在索引 0 处获得 Bean1 的结果中的数组。

    【讨论】:

    • org.springframework.orm.hibernate3.HibernateQueryException: 无法解析属性:bean2 of
    • 怎么样??我所做的是: Query query = session.createQuery("SELECT beab2.bean2_id FROM " + ((Class) Bean1.class.getName() + " bean1 " + " JOIN bean1.bean2 " + "bean2" + " WHERE " + "bean1.bean1_id=? " + " AND bean2.bean2_id=? " + " 分组 bean1.bean2.bean2_id=?");
    • 你是如何映射 bean2 集合的?多对多?一对多?
    • 另外你应该有 group by bean2.bean2_id
    • @ManyToMany 我尝试了不同的组合,同样的例外
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    相关资源
    最近更新 更多