JPQLで次の問題が発生します。1つのクラスに3つのフィールドがあります。
public class Message{
Integer ownerId;
Integer fromUserId;
Integer toUserId;
//rest of implementation
}
次に、ユーザー名でデータベースを検索したいのですが、このメッセージには所有者、受信者、送信者の3人のユーザーが関連付けられているため、SQLで行ったことは次のとおりです。
SELECT * FROM message m
LEFT JOIN user o ON m.owner_id=o.id
LEFT JOIN user fu ON m.from_user_id = fu.id
LEFT JOIN user tu ON m.to_user_id = tu.id
WHERE o.name like '%foo%' OR fu.name like '%foo%' OR tu.name like '%foo%';
これはおそらく最速のクエリではありませんが、正常に機能します。それからJPQLに翻訳したかったのですが、簡単ではありません。'on'トークンで例外が発生します。クラスに別のクラスへのリレーションが定義されている場合、JOINが可能であることを理解していますが、1つのメッセージに3人のユーザーが関連付けられているため、リレーションは少し複雑です。これを解決する方法はありますか?