多对多和HQL

时间:2011-08-15 15:32:04

标签: sql hibernate hql

我上课了:

@Entity
@Table(name="restaurants")
public class Restaurant {
    @Id
    @GeneratedValue
    private int id;
    private String name;
    private String street;
    (...)
    @ManyToMany
    @JoinTable(name="user_restaurant_owner",
            joinColumns={@JoinColumn(name="restaurant_id")},
            inverseJoinColumns={@JoinColumn(name="username")})
    private List<User> owner;

如果我知道用户(“所有者”)用户名,如何获得餐厅?

  

查询q = session.createQuery(“从餐厅作为r,其中r.owner =:username”)。setString(“username”,username);

它不起作用

3 个答案:

答案 0 :(得分:8)

如果要选择集合中元素的属性,则需要加入HQL中的集合。

from Restaurant r join r.owner o where o.username = :username

答案 1 :(得分:1)

from Restaurant as r应为from Restaurant ras(不确定是否为可选项)。 此外,您应该r.owner = ...这应该是r.owner.username = :username

答案 2 :(得分:0)

r.owner引用Owners表的PRIMARY KEY。

你想要的是一个子选择(为简单起见,在SQL中完成 - 我对HQL不太自信):

select {r.*} from Restaurant as r where r.owner = ( select id from Owners as own where own = :username ).setString("username", username)

这样,您可以将外键与其引用的字段匹配,而不是名称字段。