gpt4 book ai didi

java - 带有 Lob 字段的 QueryDSL

转载 作者:行者123 更新时间:2023-12-01 04:22:21 24 4
gpt4 key购买 nike

我有一个带有名为 RAW 的 lob 字段的实体类(eclipselink JPA 提供程序和 sql 服务器),我也使用 querydsl 来查询数据库。但我遇到了这个问题...

javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: The text data type cannot be selected as DISTINCT because it is not comparable.
Error Code: 421
Call: SELECT DISTINCT ID, ALTA, ANIO, FECHARECEPCION, INSTITUCION, MES, RAW, VERSION FROM ARCHIVO WHERE (FECHARECEPCION BETWEEN ? AND ?)
bind => [2013-01-01 00:00:00.0, 2014-01-31 23:59:59.0]
Query: ReadAllQuery(referenceClass=Archivo sql="SELECT DISTINCT ID, ALTA, ANIO, FECHARECEPCION, INSTITUCION, MES, RAW, VERSION FROM ARCHIVO WHERE (FECHARECEPCION BETWEEN ? AND ?)")

有什么建议吗?

查询是

    QArchivo archivo = QArchivo.archivo;
JPAQuery query = from(archivo);

query.where(archivo.institucion.eq(institucion));
query.where(archivo.fechaRecepcion.between(fechaInicio, fechaTermino));

List<Archivo> resultado = query.list(archivo);

return resultado;

最佳答案

奇怪的是,当您调用 list() 而不是 listDistinct() 时,它使用的是 DISTINCT,并且似乎没有调用过 unique()。仔细检查您是否没有在任何地方调用distinct()。 DISTINCT 通常仅与连接一起使用,因此由于您没有使用任何连接,所以使用它是非常奇怪的。

您还可以通过 JPQL 或 Criteria API 尝试相同的查询,除非指定,否则不应使用 DISTINCT。

如果您想使用 DISTINCT 并拥有 LOB,则无法选择 LOB。您可以将 LOB 放入其自己的表中并通过 OneToOne 引用它,或者使其 fetch=LAZY。

您还可以重新编写查询以使用子选择,以便仅在子选择中使用不同的内容。

Select a from Archivo a where exists (select a2 from Archivo a2 where ... and a = a2))

关于java - 带有 Lob 字段的 QueryDSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18790185/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com