我有一个名为RAW的实体类(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;
答案 0 :(得分:0)
当你调用list()而不是listDistinct()时,它使用DISTINCT是奇怪的,而且似乎没有调用distinct()。仔细检查你没有在任何地方调用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))