【发布时间】:2014-08-08 09:59:53
【问题描述】:
我有两个表:“users”和“mail_list”以及相应的类。
这些表通过引用id(在用户表中)的外键user_id(在mail_list 表中)连接。用户在 mail_list 表中可以有两个kinds 的记录 - 'general' 或/和 'admin'。如果用户在mail_list 表中有记录,则表示他不想收到相应类型的邮件。
我想找到所有想要接收普通邮件的用户。我确信正确的 SQL 查询如下所示:
SELECT U.id, U.email, M.user_id, M.kind
FROM users U
LEFT JOIN mail_list M
ON (U.id = M.user_id AND M.kind = 'general')
WHERE M.user_id IS NULL
但不幸的是,我对 Ebean 不太擅长。如果可能的话,你能帮我写一个这样的 Ebean 查询吗?我想避免使用原始 SQL。
在这里,我的课程的一些代码是:
@Entity
@Table(name = "users")
public class User {
@Id
public Long id;
public String email;
@OneToMany(mappedBy = "user")
public List<MailList> mailLists;
}
@Entity
@Table(name = "mail_list")
public class MailList {
@Id
public Long id;
/**
* Kind of mail list
*/
public String kind;
public static String GENERAL = "general";
public static String ADMIN = "admin";
@ManyToOne
public User user;
}
我使用 PlayFramework 2.2.3。
【问题讨论】:
-
我认为您的 SQL 中有一个错误点。为什么要在连接表中使用字段以及在哪里过滤空 Id?此查询:“SELECT U.id, U.email, M.user_id, M.kind FROM users U LEFT JOIN mail_list M ON (U.id = M.user_id AND M.kind = 'general') WHERE M.user_id IS空值”。 where 部分没有意义。
标签: java sql left-join ebean playframework-2.3