我上课了:
@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);
它不起作用
答案 0 :(得分:8)
如果要选择集合中元素的属性,则需要加入HQL中的集合。
from Restaurant r join r.owner o where o.username = :username
答案 1 :(得分:1)
from Restaurant as r
应为from Restaurant r
否as
(不确定是否为可选项)。
此外,您应该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)
这样,您可以将外键与其引用的字段匹配,而不是名称字段。