[英]JPA/Hibernate Native Queries do not recognize Parameters with EmbeddedId
I am using Hibernate/JPA to execute native MySql queries. 我正在使用Hibernate / JPA执行本机MySql查询。 I want to get the value of the counter.
我想获得计数器的价值。
For example the following query crash: 例如以下查询崩溃:
"SELECT sizeList FROM myCounter WHERE myColA=?1 AND myColB=?2 AND LIMIT 1"
Error: 错误:
java.lang.IllegalArgumentException: Parameter with that name [1] did not exist
Sources: 资料来源:
Method: 方法:
@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: 实体:
@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: 可嵌入:
@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() {
}
...
}
Does anyone know how to use setParameter() in this case ? 有谁知道在这种情况下如何使用setParameter()吗?
I tried with: 我尝试了:
//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
Instead of 代替
Query q = em.createNativeQuery("MyCounter.getSizeList");
Try this: 尝试这个:
Query q = em.createNamedQuery("MyCounter.getSizeList");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.