Mysql Spring JPA使用“生成查询”;(in)";
我有两个映射到多对多的类:User和Topic。我想做的是得到所有的主题谁提供了用户有时(这对我来说是最奇怪的部分)它给了我以下错误: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法有错误;检查与MySQL服务器版本相对应的手册,以获取第1行中使用的正确语法(接近“))” 我的课看起来像Mysql Spring JPA使用“生成查询”;(in)";,mysql,spring,hibernate,spring-data-jpa,jpql,Mysql,Spring,Hibernate,Spring Data Jpa,Jpql,我有两个映射到多对多的类:User和Topic。我想做的是得到所有的主题谁提供了用户有时(这对我来说是最奇怪的部分)它给了我以下错误: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法有错误;检查与MySQL服务器版本相对应的手册,以获取第1行中使用的正确语法(接近“))” 我的课看起来像 我错过了什么 除了读取用户的FavoriteTopic关联之外,此查询没有提供任何内容?只需使用关联。而不是在我使用JOIN
我错过了什么 除了读取用户的FavoriteTopic关联之外,此查询没有提供任何内容?只需使用关联。而不是在我使用JOIN的语句中使用。这是我现在的问题:
SELECT t FROM Topic t JOIN t.favoritedBy u WHERE :user = u
调用JPQL查询的代码在哪里?包括设置参数?把那个片段贴在这里而不是别的地方else@DN1更新了存储库代码确保您在(.)中传递的
in
子句中的列表(或值数组)不是空的/null。但有时当我访问关联时,我会收到一个关于sessionMysql在使用in时无法处理空/空列表的异常,受到保护,例如:(coalesce(:idParam)在(:idParam)中为null或entity.id。但是,您可能应该对会话异常进行排序,因为任何时候您需要延迟加载一个assoc时,您都不能这样做。关于如何避免延迟/代理类型错误,有很多答案,这取决于您的堆栈(@Transaction),因为看起来您使用的是Spring数据
@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 (.))
SELECT t FROM Topic t JOIN t.favoritedBy u WHERE :user = u