gpt4 book ai didi

sql - JPA 命名查询匹配 IN 子句中的元组列表

转载 作者:行者123 更新时间:2023-12-04 08:48:47 24 4
gpt4 key购买 nike

Spring 数据 jpa 1.4.3 与 Oracle 11g。

我有一个这样的实体:

class LinkRecord {
String value;
int linkType;
...
}

我使用 (value, linkType) 作为复合索引。
对于给定的 (v, t) 元组列表,我们需要选择 DB 中的所有记录,以便 value = v, linkType = t。

基本上,我想构建这个查询:
SELECT * FROM LINK_RECORD WHERE (VALUE, LINK_TYPE) IN (('value1', 0), ('value2', 25), ...)

其中 IN 子句中的列表作为参数传入。

由于我们正在处理大量数据,因此逐个查询元组是非常不可取的。

在我的存储库中,我试过这个:
@Query("select r from LinkRecord r where (r.value, r.linkType) in :keys")
List<LinkRecord> findByValueAndType(@Param("keys")List<List<Object>> keys);

其中,keys 是(长度为 2 的列表)的列表。这让我得到 ORA_00920:无效的关系运算符。

有什么办法可以使用命名查询来完成这项工作吗?还是我必须求助于 native sql?

最佳答案

答案为时已晚,但也许其他人也有同样的问题。这是我的工作示例之一。在这里,我需要搜索与给定组合键匹配的所有条目:

实体....

@Entity
@NamedQueries({
@NamedQuery(name = "Article.findByIdAndAccessId", query = "SELECT a FROM Article a WHERE a.articlePk IN (:articlePks) ORDER BY a.articlePk.article")
})
@Table(name = "ARTICLE")
public class Article implements Serializable
{
private static final long serialVersionUID = 1L;

@EmbeddedId
private ArticlePk articlePk = new ArticlePk();

@Column(name = "art_amount")
private Float amount;

@Column(name = "art_unit")
private String unit;

public Article()
{
}

//more code
}

PK课……

@Embeddable
public class ArticlePk implements Serializable
{
private static final long serialVersionUID = 1L;

@Column(name = "art_article")
private String article;

@Column(name = "art_acc_identifier")
private Long identifier;

public ArticlePk()
{
}

public ArticlePk(String article, Long identifier)
{
this.article = article;
this.identifier = identifier;
}

@Override
public boolean equals(Object other)
{
if (this == other)
{
return true;
}
if (!(other instanceof ArticlePk))
{
return false;
}

ArticlePk castOther = (ArticlePk)other;
return this.article.equals(castOther.article) && this.identifier.equals(castOther.identifier);
}

@Override
public int hashCode()
{
final int prime = 31;
int hash = 17;
hash = hash * prime + this.article.hashCode();
hash = hash * prime + this.identifier.hashCode();

return hash;
}

//more code
}

由...调用

TypedQuery<Article> queryArticle = entityManager.createNamedQuery("Article.findByIdAndAccessId", Article.class);
queryArticle.setParameter("articlePks", articlePks);
List<Article> articles = queryArticle.getResultList();

在哪里....
articlePksList<ArticlePk> .

关于sql - JPA 命名查询匹配 IN 子句中的元组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23832551/

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