Yub*_*raj 2 java sql-server jpa-2.0
我有两个实体,如SmsOut和SmsIn.两个实体之间的关系包含OneToMany,其中smsIn.id是主键,smsOut.sms_in_id是外键.
现在我想在查询上传递smsIn.mobileNumber,smsIn.smsText等参数
SELECT so FROM SmsOut so order by id desc
Run Code Online (Sandbox Code Playgroud)
以下是我的数据库图表:

编辑
以下是我的代码:
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();
Run Code Online (Sandbox Code Playgroud)
例外是:
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)
Run Code Online (Sandbox Code Playgroud)
请帮我.谢谢
您还没有解释的JPA关系SmsIn和SmsOut,所以我会假设SmsOut有一个getSmsIn()与在关系id领域.
当你有一个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();
Run Code Online (Sandbox Code Playgroud)
有关可以指定参数的不同方法,请参阅JavadocQuery.
| 归档时间: |
|
| 查看次数: |
22565 次 |
| 最近记录: |