当前位置: 首页 > 知识库问答 >
问题:

用“(?in(.))”生成查询的Spring JPA

陆子石
2023-03-14

我有两个多对多映射的类:用户和主题。我想做的是得到所有的主题谁有提供的用户。有时(这是我最奇怪的部分)它会给我带来这样的错误:

com.mysql.jdbc.exceptions.jdbc4.mysqlsyntaxerrorexception:您的SQL语法中有一个错误;请查看与您的MySQL服务器版本相对应的手册,以便在第1行'))'附近使用正确的语法

@Entity
@Table(name = "user")
public class User {

    /* ... */

    @JsonIgnore
    @LazyCollection(LazyCollectionOption.TRUE)
    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(name = "favorite_topics", 
           joinColumns = @JoinColumn(name = "user_id"), 
           inverseJoinColumns = @JoinColumn(name = "topic_id"))
    private Set<Topic> favoriteTopics;

    /* ... */
}
@Entity
@Table(name = "topic")
public class Topic {

   /* ... */

    @JsonIgnore
    @LazyCollection(LazyCollectionOption.TRUE)
    @ManyToMany(mappedBy = "favoriteTopics", fetch = FetchType.LAZY)
    private Set<User> favoritedBy;

   /* ... */
}
@Repository("topicRepository")
public interface TopicRepository extends JpaRepository<Topic, Integer> {

    /* ... */

    @Query("SELECT t FROM Topic t WHERE :user in t.favoritedBy")
    Set<Topic> favoritedBy(@Param("user") User user);

    /* ... */
}

返回的查询是:

select topic0_.* 
  from topic topic0_
  cross join favorite_topics favoritedb1_, user user2_ 
  where topic0_.topic_id = favoritedb1_.topic_id 
     and favoritedb1_.user_id = user2_.user_id 
     and (? in (.))

我在这里漏掉了什么?完整的代码在github

共有1个答案

孙斌
2023-03-14

这个查询除了读取用户最喜欢的关联之外,没有提供任何东西吗?就用关联。

 类似资料:
  • 我有表,当我添加新行时,我想计算一个id号。 条件: 如果我有缺失的数字,请给出最小的一个(3),如果我没有缺失的数字,请给出一行中的下一个数字(5) 如何将此条件构建到查询中? 我的查询: 桌子 如果我缺少id,则解决方案 如果我没有丢失的id,则解决方案

  • 我想不出如何使用TypeOrm查询生成器编写以下MySql语句 从farm.reg中选择reg.id,其中grpId=“abc”; 这个选择返回的只是ID的,但我的查询生成器返回的是整个对象。 现在,我在我的NestJs服务中有这个函数,但我需要使用'map',我不想… 谢谢

  • 有几种不同方法可以生成查询结果: 结果数组 结果行 自定义结果对象 结果辅助方法 Class Reference 结果数组 result() 方法 该方法以**对象数组**形式返回查询结果,如果查询失败返回**空数组**。 一般情况下,你会像下面这样在一个 foreach 循环中使用它: $query = $this->db->query("YOUR QUERY"); foreach ($que

  • 但是生成的SQL查询是 正如您所看到的,括号改变了,我相信两个查询中的条件并不相同。是虫子吗?使用hibernate和spring以及postgresql数据库。

  • 我有一个名为TEST的表,列名为col1、col2、col3、col4。。。。。。。。。。所以,从信息模式来看。列我将获得有关此表对象的详细信息。 现在,我想通过从信息_模式中提供列名称,从测试表中构建一个select查询。柱。像这样,从information_schema中选择column_name。表_name='TEST'中的列。这会回来的 col1 col2 col3 我想在selectq

  • 我有以下工作查询 它在整个路径=/content/dam上运行,所以它遍历所有节点大约20分钟,并给出结果。 当以编程方式使用查询生成器api时,我如何才能批量使用它,比如-遍历1000个节点并按代码执行某些操作,然后继续查询并遍历下1000个节点等等?这可能吗? 谢谢。