简体   繁体   English

如何在jpa查询上传递参数?

[英]How to pass parameter on jpa query?

I have two entities Like SmsOut and SmsIn . 我有两个实体,如SmsOutSmsIn 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.mobileNumbersmsIn.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. 你没有解释SmsInSmsOut之间的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 

如何传递 Map 或 List<object> 作为 JPA 查询的参数<div id="text_translate"><p>我需要将 map 作为 <Sting,String> 或 List 类型的输入参数传递到两个 JPA 列中,并将结果作为映射/列表中所有条目的记录列表。</p><p> 是这样的:</p><pre> @Query( value = "SELECT e from #{#entityName} e where e.name = KEY(someMap) and e.relationName = VALUE(someMap)") List<Member> findByNameAndRelationNameIn( @Param("someMap") Map<String, String> someMap);</pre><p> 或者</p><pre>@Query( value = "SELECT e from #{#entityName} e where e.name IN (:#{#dataSpaceMembers.?[name]}) and e.dataSpaceName IN (:#{#dataSpaceMembers.?[dataSpaceName]})") List<DataSpaceMember> findByNameAndDataSpaceIn( @Param("dataSpaceMembers") List<DataSpaceMember> dataSpaceMembers);</pre><p> 但是应用程序不会运行,因为这不是有效的 jpa 查询。 我不想在循环中运行单个查询,而是寻找一个可以将结果作为列表给出的查询。</p></div></object> - how to pass Map or List<Object> as a parameter to JPA query

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何使用 {} 在 JPA 查询中传递列表参数 - How to pass parameter of list in JPA query with {} 如何传递 Map 或 List<object> 作为 JPA 查询的参数<div id="text_translate"><p>我需要将 map 作为 <Sting,String> 或 List 类型的输入参数传递到两个 JPA 列中,并将结果作为映射/列表中所有条目的记录列表。</p><p> 是这样的:</p><pre> @Query( value = "SELECT e from #{#entityName} e where e.name = KEY(someMap) and e.relationName = VALUE(someMap)") List<Member> findByNameAndRelationNameIn( @Param("someMap") Map<String, String> someMap);</pre><p> 或者</p><pre>@Query( value = "SELECT e from #{#entityName} e where e.name IN (:#{#dataSpaceMembers.?[name]}) and e.dataSpaceName IN (:#{#dataSpaceMembers.?[dataSpaceName]})") List<DataSpaceMember> findByNameAndDataSpaceIn( @Param("dataSpaceMembers") List<DataSpaceMember> dataSpaceMembers);</pre><p> 但是应用程序不会运行,因为这不是有效的 jpa 查询。 我不想在循环中运行单个查询,而是寻找一个可以将结果作为列表给出的查询。</p></div></object> - how to pass Map or List<Object> as a parameter to JPA query Spring Data JPA如何传递日期参数 - Spring Data JPA How to pass a date parameter 如何将字符串列表作为参数传递给 JPA 本机查询并在 Postgresql ARRAY [] - How to pass List of strings as parameter to JPA native query and substitute the same in Postgresql ARRAY[] 将参数传递给 jpa 转换器 - pass parameter to jpa converter 如何编写JPA查询,其中参数是一个集合? - How to write JPA query where parameter is a set? 我将如何使用jpa在jpa对象列表中查询参数 - How would I use jpa to query for a parameter IN a list of jpa objects 如何在本机查询 JPA 中传递参数 - How to pass parameters in a native query JPA LinkedIn-如何传递查询参数 - LinkedIn - how to pass query parameter JPA - 查询参数为null - JPA - query parameter is null
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM