У меня есть две таблицы: "users" и "mail_list" с соответствующими классами.
Эти таблицы связаны с помощью внешнего ключа user_id
(в таблице mail_list), который ссылается на id
(в таблице users). Пользователи могут иметь записи двух kinds
в таблице mail_list - "общий" и/или "админ". Если у пользователя есть запись в таблице 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-запрос, если это возможно? Я бы хотел избежать использования Raw 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.