gpt4 book ai didi

java - JPA/Hibernate native 查询无法识别具有 EmbeddedId 的参数

转载 作者:行者123 更新时间:2023-11-30 23:53:16 27 4
gpt4 key购买 nike

我正在使用 Hibernate/JPA 执行 native MySql 查询。我想获取计数器的值。

例如下面的查询崩溃:

"SELECT sizeList FROM myCounter WHERE myColA=?1 AND myColB=?2 AND LIMIT 1"

错误:

java.lang.IllegalArgumentException: Parameter with that name [1] did not exist

来源:

方法:

@Override
public Long getSizeList(String myColA, String myColB) {
Query q = em.createNativeQuery("MyCounter.getSizeList");
q.setParameter(1, myColA);
q.setParameter(2, myColB);
return (Long) q.getSingleResult();
}

实体:

@Entity
@Table(name = "myCounter")
@XmlRootElement
@NamedNativeQueries({
@NamedNativeQuery(name = "MyCounter.getSizeList", query = "SELECT sizeList FROM myCounter WHERE myColA=?1 AND myColB=?2 AND LIMIT 1", resultClass = MyCounter.class)})
public class MyCounter implements Serializable {

private static final long serialVersionUID = 1L;
@EmbeddedId
protected MyCounterPK myCounterPK;
@Column(name = "sizeList")
private BigInteger sizeList;

public PostListCounterPTTESLTTT() {
}

...

public BigInteger getSizeList() {
return sizeList;
}

}

可嵌入:

@Embeddable
public class MyCounterPK implements Serializable {
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 255)
@Column(name = "myColA")
private String myColA;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 50)
@Column(name = "myColB")
private String myColB;

public MyCounterPK() {
}

...

}

有人知道在这种情况下如何使用 setParameter() 吗?

我试过:

//case 1:
"SELECT sizeList FROM myCounter WHERE myColA=?1 AND myColB=?2 AND LIMIT 1"
q.setParameter(1, myColA); //the same error

//case 2:
"SELECT sizeList FROM myCounter WHERE myColA=?1 AND myColB=?2 AND LIMIT 1"
q.setParameter("1", myColA); //the same error

//case 3:
"SELECT sizeList FROM myCounter WHERE myColA=:myColA AND myColB=:myColB AND LIMIT 1"
q.setParameter("myColA", myColA); //the same error

最佳答案

代替

Query q = em.createNativeQuery("MyCounter.getSizeList");

试试这个:

Query q = em.createNamedQuery("MyCounter.getSizeList");

关于java - JPA/Hibernate native 查询无法识别具有 EmbeddedId 的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26750895/

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