HQL присоединиться и сгруппировать по проблеме - PullRequest
0 голосов
/ 29 декабря 2010

Я пытаюсь сделать запрос в 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;
    }


    ...
    }

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]

Что я действительно хочу получить, так это то, сколько bean2_id повторяется в одном bean1 с заданным bean1_id.
Я в правильном пути? Hibernate 3.6.0 Заранее спасибо

1 Ответ

2 голосов
/ 29 декабря 2010

Если я правильно понимаю ваш вопрос, вы должны сделать что-то вроде этого:

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

Обратите внимание, что в результате вы получите массив с Bean1 с индексом 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...