我正在使用querydsl-jpa,我有一个名为DataSourceColumn的实体,其中包含一个Enum成员:
@Enumerated(EnumType.STRING)
@Column(name="COULMN_TYPE")
private eColumnType columnType;
尝试查询该实体时:
QDataSourceColumn qDataSourceColumn = QDataSourceColumn.dataSourceColumn;
JPAQuery query = new JPAQuery(entityManager);
List<DataSourceColumn> kpis = query.from(qDataSourceColumn)
.where(qDataSourceColumn.columnType.eq(eColumnType.HEAD)))
.list(qDataSourceColumn);
我得到一个空列表。当试图直接选择它时,如
SELECT * FROM DATA_SOURCE_COLUMN WHERE column_type = 'HEAD'
我得到了所需的结果。在我看来,我正在以错误的方式使用枚举查询 - 我该如何解决?
修改: 生成的JPQL是
select dataSourceColumn
from DataSourceColumn dataSourceColumn
where dataSourceColumn.columnType = ?1
答案 0 :(得分:1)
所以我解决了 - 问题出现在数据库中 - 不知道为什么。
我使用PostgreSql但它没有用。然后我在SQL Server上尝试了它并且它有效。我检查了两个数据库之间的列定义没有区别。并且只有使用QueryDsl的Enum才会出现错误。
所以我从PostgreSql中删除了表DataSourceColumn表,让Hibernate从实体中自动生成表 - 然后就可以了。