java - 如何在 Ebean 中对两个参数进行左连接?

标签 java sql left-join ebean playframework-2.3

我有两个表:“users”和“mail_list”以及相应的类。
这些表借助引用 id(在 users 表中)的外键 user_id(在 mail_list 表中)连接。用户在 mail_list 表中可以有两种种类的记录 - '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。

最佳答案

我对你的问题的解决方案是:

List<MailList> mailList = MailList.find.where().like("kind", "general").findList();     
Set<User> userSet = new HashSet<User>();
for(MailList mail:mailList)
    userSet.add(mail.user);

它会找到满足搜索条件的邮件列表。然后它创建一组用户。

关于java - 如何在 Ebean 中对两个参数进行左连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25200815/

相关文章:

java - 在Python中运行包含java命令的批处理文件

java - 使用 javaw.exe 启动应用程序时不执行关闭 Hook

MySQL LEFT JOIN ON 条件的顺序

数据库 |左加入 wp_posts 和 wp_postmeta

java - 检测 Android VoIP 来电

java - Hibernate 派生实体

sql - SQL Compact Edition 是否支持聚集索引?

mysql - 数据库表设计问题?

mysql - 在 MySQL 表上正确使用连接

mysql - 可以通过一个查询引用两个特定的表