Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Hibernate left join sql => hql


Автор: gelo86 22.6.2008, 14:25
Вот ест у меня такой код:

Код

@Entity
@Table(name = "hibernate_corporation")
public class HibernateCorporation {
    private static final long serialVersionUID = -581320191187294904L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    protected Integer id;
    
    @Column(name = "name")
    private String name;

    @ManyToOne
    @JoinColumn(name = "director")
    private HibernateCorporation director;

    @OneToMany(mappedBy = "director", cascade = CascadeType.ALL)
    private Set<HibernateCorporation> subordinate;

    public HibernateCorporation() {
        super();
    }

    public Integer getId() {
        return this.id;
    }

    public void setId(Integer id) {
        this.id = id;
    }
    
    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public HibernateCorporation getDirector() {
        return this.director;
    }

    public void setDirector(HibernateCorporation director) {
        this.director = director;
    }

    public Set<HibernateCorporation> getSubordinate() {
        return this.subordinate;
    }

    public void setSubordinate(Set<HibernateCorporation> subordinate) {
        this.subordinate = subordinate;
    }

    @Override
    public boolean equals(Object another) {
        if (another == null) {
            return false;
        }
        if (another instanceof DomainModel) {
            if (((DomainModel) another).getId() == null) {
                return false;
            }
            return ((DomainModel) another).getId().equals(this.getId());
        } else {
            return false;
        }
    }

}


Hiberante пашет, все нормално. Но вот нада непер записат такой sql на hql:

Код

SELECT c1.name FROM hibernate_corporation AS c1 LEFT JOIN hibernate_corporation as c2 ON c1.id = c2.director WHERE c2.id IS NULL;
Код





Исползую MySQL. В консоли такой sql работает. Но как такой превратит в hql?


Автор: MisterCleric 23.6.2008, 09:33
Здравствуй
а так не пробовал?
Код

session.createCriteria(HibernateCorporation.class)
            .createAlias("subordinate", "c2")
            .add(Restrictions.isNull("c2.id")).list();

Автор: taro 23.6.2008, 12:28
В HQL нет, согласно ответам создателей, left-join
Пруфлинки гуглятся в форуме поддержки в течении минуты. 
выкручивайся where entity.field is null

Автор: Ortega 2.10.2008, 16:57
Код

SELECT c1.name FROM  HibernateCorporation c1 WHERE c1.director.id IS NULL


Хотя нулловый айдишник - вещь мифическая...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)