- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有两个模型,Location
和 LocationAttribute
,具有多对多关系。我有一个 LocationAttribute ID 列表,我想找到至少有一个的所有 Locations这些属性。
位置.java:
@Entity
public class Location {
@Id
@GeneratedValue
@Column(name="LOCATION_ID")
protected int id;
@ManyToMany(targetEntity = LocationAttribute.class)
@JoinTable(name="LOCATION_TO_LOCATION_ATTRIBUTE",
joinColumns = @JoinColumn(name="LOCATION_ID", referencedColumnName = "LOCATION_ID"),
inverseJoinColumns = @JoinColumn(name="LOCATION_ATTRIBUTE_ID", referencedColumnName = "LOCATION_ATTRIBUTE_ID")
)
private List<LocationAttribute> locationAttributes;
}
位置属性.java:
@Entity
public class LocationAttribute {
@Id
@GeneratedValue
@Column(name="LOCATION_ATTRIBUTE_ID")
protected int id;
}
我尝试了以下 QueryDSL 代码:
List<Integer> locationAttributeIds = new ArrayList<Integer>();
locationAttributeIds.add(1);
locationAttributeIds.add(2);
locationAttributeIds.add(3);
QLocation location = QLocation.location;
JPAQuery query = new JPAQuery(entityManager, JPQLTemplates.DEFAULT);
query.from(location) .where(location.locationAttributes.any().id.in(locationAttributeIds));
query.list(location);
如果 locationAttributeIds 有 0 或 1 个元素,代码工作正常。但是,当我有超过 1 个元素时,我会收到此错误:
java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: , near line 5, column 53 [select location
from ch.locatee.test.querydslerror.locatee.Location location
where exists (select location_locationAttributes_cc6d8
from location.locationAttributes as location_locationAttributes_cc6d8
where location_locationAttributes_cc6d8.id in :x1_0_, :x1_1_, :x1_2_)]
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1750)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1677)
at org.hibernate.jpa.internal.QueryImpl.getResultList(QueryImpl.java:458)
at com.mysema.query.jpa.impl.AbstractJPAQuery.getResultList(AbstractJPAQuery.java:194)
at com.mysema.query.jpa.impl.AbstractJPAQuery.list(AbstractJPAQuery.java:246)
at ch.locatee.test.querydslerror.locatee.AppTest.testSomething(AppTest.java:63)
我找到了很多与我的问题相关的网站,但不确定如何解决该问题。
我做了一个快速测试项目,你可以在 Github 上找到它:https://github.com/bekoeppel/QueryDslInErrorTest . mvn test
产生上述错误。
如果您提出我如何从列表中找到至少具有一个 LocationAttribute.id
的所有 Locations
,我将不胜感激。谢谢!
最佳答案
改为使用以下 JPAQuery 构造函数
new JPAQuery(entityManager);
JPQLTemplates
提供通用序列化,它不会找到 Hibernate 的所有 JPQL 变体。仅使用 EntityManager 参数,Querydsl 将为您选择正确的 JPQLTemplates 子类实例。
关于java - QueryDSL Unexpected Token ,带有 any() 和 in 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29865648/
我的 QueryDSL 给了我一个异常(exception): 2014-10-26 02:12:00,013 DEBUG [ExceptionsHandler] org.springframewo
我想在 QueryDSL 中表达以下(Oracle)查询: SELECT * FROM entity WHERE entity.created < (sysdate - entity.delayInD
我们已经使用 maven 插件在我们的项目中配置了 QueryDSL 的生成: com.mysema.maven apt-maven-p
我有一个实体,其中包含一个名为 date 的字段和一个名为 creationDate 的字段。第一个可以为空,后者不能为空。 现在我想获取特定时间范围内的所有项目。如果date不为空,则使用date。
我看到了 Querydsl 的示例,但我不明白其中的 QEmployee 是什么 QEmployee employee = QEmployee.employee; QEmployee e = new
我是 QueryDSL 的新手,并且能够在 WHERE-IN 子句中使用多列组合查询,如下面的查询: selec T1.COL1, T1.COL2, .... T1.COL10 from T1 whe
我正在使用 FilfetDto 构建动态查询如果用户填写了 UI 中的某些字段,则该字段将包含一些值,但不是全部。所以我必须测试每个属性以仅在填充(非空)字段上构建查询过滤: JPAQuery
我正在尝试创建一个 where 子句,它检查一个值是否存储在列中(在“Q”类中标识为 public final DateTimePath startDate = createDateTime(
如何在 queryDsl 中编写此查询 SELECT a.id, (SELECT count(*) FROM ancestors_table t where t.ancestors LIKE CONC
我正在使用 QueryDSL 将我的查询映射到我的 Bean 中: QAmbiente qitem=new QAmbiente("x"); SQLTemplates template = new My
我正在尝试使用 QueryDSL 计算平均日期差异。 我创建了 a small project以简化的方式演示我要完成的工作(真正的查询要复杂得多,有大量的连接/位置/排序子句)。我们有一个 Cust
我们有一个正在进行的项目,我们在其中使用 querydsl-jpa 进行查询。当我们部署产品的新版本时,它会在启动 hibernate 之前自动执行 sql 文件脚本来更新表。此脚本只是手动制作的 s
事情是这样的: 我一直在使用querydsl-jpa在我的项目中,代码生成从来都不是问题。我在maven中使用这个插件: com.mysema.maven ma
如何在 QueryDSL 中以以下形式表达 where 子句: WHERE (E1 AND E2) OR (E3 AND E4) E1..E4 是任意 bool 表达式。要点是在括号内开始查询,因此
我正在尝试使用此处描述的替代方法从groovy实体生成querydsl类http://www.querydsl.com/static/querydsl/2.7.3/reference/html/ch0
public class ProductDTO { public ProductDTO(final String name, final Boolean isBrandNew) { ... }
我正在尝试使用投影从实体及其具有的某些关系中提取数据。然而。投影的构造函数接受三个参数;一个集合,整数和另一个整数。如果我没有将集合作为参数,这一切都很好,但是一旦我添加了集合,我就会开始收到 S
我只想检查 - QueryDSL 版本 3.1.1。 - 是否仍然无法加入子查询,如这里的答案中所写: JPQL / QueryDSL: join subquery and get aliased c
使用 QueryDSL - 除了使用 . Between 之外,还有其他方法可以从时间戳中按日期选择行吗?像这样的查询: where convert(date, mytimestamp) = '201
看来在 Jpa QueryDsl 中我可以使用分页,如下所示: return new JPAQueryFactory(getEntityManager()) .selectFrom(entit
我是一名优秀的程序员,十分优秀!