gpt4 book ai didi

java - 在 JPQL 中迭代集合

转载 作者:行者123 更新时间:2023-12-01 15:38:21 25 4
gpt4 key购买 nike

我正在尝试使用 LIKE 表达式在文章标题、正文和标签名称中搜索关键字。文章和标签使用一对多关系定义

这是我类(class)的代码片段:

@Entity
public class Article implements Serializable {

@Basic(optional = false)
@NotNull
@Lob
@Size(min = 1, max = 65535)
@Column(name = "body", nullable = false, length = 65535)
private String body;
@Basic(optional = false)

@NotNull
@Size(min = 1, max = 250)
@Column(name = "title", nullable = false, length = 250)
private String title;

@Basic(optional = false)
@NotNull
@Size(min = 1, max = 9)
@Column(name = "status", nullable = false, length = 9)
private String status;

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "articleId", referencedColumnName = "id", nullable = false)
private List<Tag> tagList;

// other attributes and methods
}

此外,Tag 类具有 name 属性。

我在搜索标签名称内的关键字时遇到问题。我已经尝试过这段代码:

SELECT DISTINCT a FROM Article a ,IN(a.tagList) tag
WHERE a.status = :status AND
(a.title LIKE :pattern OR a.body LIKE :pattern
OR tag.name LIKE :pattern)

但它没有给出正确的结果;并未显示所有文章。

我是使用 IN 直接迭代标签,还是需要指定 LEFT JOIN?任何帮助将不胜感激。

提前致谢

如果有人遇到此类问题,这是适合我的情况的解决方案

select distinct a from Article a left join a.tagList tag where a.status = :status and 
(a.title like :pattern or a.body like :pattern or tag.name like :pattern)

最佳答案

首先,您使用的 in 是错误的 - 它应该位于 where 子句中,而不是 select 的一部分>。我很惊讶你没有得到异常(exception) 。 ( wrong :请参阅 Mikko 的评论)。

但就您而言,您不能使用 in,因为您想使用 like 运算符。

我会尝试这样的事情:

select a from Article a join a.tagList tag where a.status = :status and 
(a.title like :pattern or a.body like :pattern or tag.name like :pattern)

关于java - 在 JPQL 中迭代集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8499832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com