Java HQL IN子句是否只接受有限数量的值(MySQL数据库)?

Java HQL IN子句是否只接受有限数量的值(MySQL数据库)?,java,mysql,hql,limit,sql-in,Java,Mysql,Hql,Limit,Sql In,这是我的简化数据库: user_post - id - post_id (FK) post - id - link_id (FK) link - id 我有一个user\u post的列表,我想为他们每个人获得链接到的链接 目前,我是这样做的: SELECT userPost.post.link FROM UserPost userPost WHERE userPost IN (:userPosts) for (UserPost userPost : user.getUserPosts(

这是我的简化数据库:

user_post
- id
- post_id (FK)

post
- id
- link_id (FK)

link
- id
我有一个
user\u post
的列表,我想为他们每个人获得链接到的
链接

目前,我是这样做的:

SELECT userPost.post.link FROM UserPost userPost WHERE userPost IN (:userPosts)
for (UserPost userPost : user.getUserPosts()) {
    Link link = userPost.getPost().getLink();
    //
}
工作得很好,但可能以后,我会收到大量的
用户帖子
,因此在
IN
子句(100
中是否有限制?还有别的办法吗?以前,我是这样做的:

SELECT userPost.post.link FROM UserPost userPost WHERE userPost IN (:userPosts)
for (UserPost userPost : user.getUserPosts()) {
    Link link = userPost.getPost().getLink();
    //
}
但是上面的解决方案执行起来确实需要很多时间,所以我正在寻找一个更优化的解决方案。

是的,:

in列表中的值数量仅受 允许的最大数据包值

在Oracle中,限制设置为1000个元素

您可以在与用户帖子相同的查询中加载链接,而不是选择用户帖子,然后迭代它们以获取链接或发出另一个查询以获取链接:

select userPost from UserPost userPost
left join fetch userPost.post post
left join fetch post.link link;

此查询将立即加载所有内容,使用
userPost.getPost().getLink()
迭代用户帖子并获取其链接不会触发任何其他查询。

我不知道,非常感谢!但是如果我有一个自定义的
user\u post
列表,即不是每个
user\u post
用户都链接到该列表,而是只链接到其中的一个子列表,该怎么办?有什么了不起的事吗?
select userPost from:userPosts userPost…
但我想这是不可能的,是吗?如果这些用户帖子是通过查询加载的,只需将左连接回迁添加到此查询中,就可以得到用户帖子的子列表,附带问题:如果我在同一个HTTP请求执行中两次运行带有
JOIN FETCH
子句的查询,是否会休眠两次获取结果,或者如果他已经获取了结果,它是否会查看其缓存?除非配置了查询缓存,否则查询将与所有其他查询一样执行两次。