Java 如何根据排除原则从另一个表中筛选选择
我在SpringBootV1.5.7下的应用程序 我有3个实体(示意图): 现在我需要为用户选择所有单词,但排除用户列表中的单词 用户_id=1的本机SQL为Java 如何根据排除原则从另一个表中筛选选择,java,sql,hibernate,spring-boot,spring-data-jpa,Java,Sql,Hibernate,Spring Boot,Spring Data Jpa,我在SpringBootV1.5.7下的应用程序 我有3个实体(示意图): 现在我需要为用户选择所有单词,但排除用户列表中的单词 用户_id=1的本机SQL为 select * from Word w left join UserWordList uwl on w.id = uwl.word_id and uwl.user_id = 1 left join UserAnotherWordList uawl on w.id = uawl.word_id and uawl.user
select *
from Word w
left join UserWordList uwl
on w.id = uwl.word_id and uwl.user_id = 1
left join UserAnotherWordList uawl
on w.id = uawl.word_id and uawl.user_id = 1
where uwl.word_id is NULL
and uawl.word_id is NULL
最好的方法是什么?理想情况下,我希望使用Spring数据功能或HQL,但我不明白如何
UPD
我用本机查询解决了我的问题:
@Entity
@NamedNativeQuery(
name = "User.getWordsToProcess",
resultClass = Word.class,
query = "<...native query to select Words...>"
)
public class User {...}
...
public interface UserRepository extends CrudRepository<User, Integer> {
List<Word> getWordsToProcess(Integer userId);
}
@实体
@命名设备(
name=“User.getWordsToProcess”,
resultClass=Word.class,
query=“”
)
公共类用户{…}
...
公共接口UserRepository扩展了Crudepository{
列出getWordsToProcess(整数用户标识);
}
最快的答案是标准
api(但在hibernate 5.2及更高版本中不推荐使用)
因此,您可以使用Hql:
getSession().createQuery(" select * from UserWordList u left join fetch u.word
left join fetch u.user").list()
您可以使用union
或创建另一个查询来获取UserAnotherWordList
。
您还可以在Hql中设置任何限制,如下所示:
Query query = getSession().createQuery(" select * from UserWordList u left join fetch u.word left join fetch u.user us where us.user = :sample").list();
query.setParameter("sample",value);
query.list();
投票吧。我对i18n有问题,您的
左加入获取帮助我解决了问题!
Query query = getSession().createQuery(" select * from UserWordList u left join fetch u.word left join fetch u.user us where us.user = :sample").list();
query.setParameter("sample",value);
query.list();