[英]How to pass parameter on jpa query?
I have two entities Like SmsOut and SmsIn . 我有两个实体,如SmsOut和SmsIn 。 The relation between two entities contains OneToMany where smsIn.id is primary key and smsOut.sms_in_id is foreign key .
两个实体之间的关系包含OneToMany ,其中smsIn.id是主键 , smsOut.sms_in_id是外键 。
Now I want to pass parameter like smsIn.mobileNumber , smsIn.smsText and so on, on the query 现在我想在查询上传递smsIn.mobileNumber , smsIn.smsText等参数
SELECT so FROM SmsOut so order by id desc
Following is my database diagram: 以下是我的数据库图表:
Edited 编辑
Following is my code : 以下是我的代码:
String sql = "SELECT so FROM SmsOut so WHERE so.smsInId.mobileNumber =:mobileNumber AND so.smsInId.smsText =:smsText AND so.smsInId.shortCode =:shortCode between so.smsOutDate =:startDate and so.smsOutDate =:endDate order by id desc";
Query query = em.createQuery(sql);
query.setParameter("mobileNumber", mobileNumber);
query.setParameter("smsText", smsText);
query.setParameter("shortCode", shortCode);
query.setParameter("smsOutDate", startDate);
query.setParameter("smsOutDate", endDate);
smsOutList = query.getResultList();
and exception is : 例外是:
SEVERE: line 1:188: expecting "and", found '='
java.lang.IllegalArgumentException: org.hibernate.hql.ast.QuerySyntaxException: expecting "and", found '=' near line 1, column 188 [SELECT so FROM com.f1soft.SMSC.entities.SmsOut so WHERE so.smsInId.mobileNumber =:mobileNumber AND so.smsInId.smsText =:smsText AND so.smsInId.shortCode =:shortCode between so.smsOutDate =:startDate and so.smsOutDate =:endDate order by id desc]
at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:624)
at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:96)
Please Help me. 请帮我。 Thanks
谢谢
You haven't explained the JPA relationship between SmsIn
and SmsOut
, so I'll assume SmsOut
has a getSmsIn()
with a relation on the id
field. 你没有解释
SmsIn
和SmsOut
之间的JPA关系,所以我假设SmsOut
有一个与id
字段有关系的getSmsIn()
。
When you have an EntityManager em
, you can call em.createQuery
, which is like SQL prepare
, and then setParameter
: 当你有一个
EntityManager em
,你可以调用em.createQuery
,就像SQL prepare
,然后是setParameter
:
TypedQuery<SmsOut> q = em.createQuery("SELECT so FROM SmsOut so WHERE so.smsIn.mobileNumber = :number ORDER BY id DESC");
q.setParameter("number", "12345678");
List<SmsOut> results = q.getResultList();
See the Javadoc for Query
for the different ways you can specify the parameters. 有关可以指定参数的不同方法,请参阅Javadoc for
Query
。
SELECT so FROM SmsOut so WHERE smsIn.mobileNumber = ? AND smsIn.smsText =? order by id desc
Replace the ? 更换 ? sign with the apropiate values.
签署合适的价值观。
between is the problem: 之间是问题:
between so.smsOutDate =:startDate and so.smsOutDate =:endDate
try 尝试
so.smsOutDate between =:startDate and =:endDate
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.