在querydsl上使用enum

时间:2014-09-22 07:10:52

标签: jpa querydsl

我正在使用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

1 个答案:

答案 0 :(得分:1)

所以我解决了 - 问题出现在数据库中 - 不知道为什么。

我使用PostgreSql但它没有用。然后我在SQL Server上尝试了它并且它有效。我检查了两个数据库之间的列定义没有区别。并且只有使用QueryDsl的Enum才会出现错误。

所以我从PostgreSql中删除了表DataSourceColumn表,让Hibernate从实体中自动生成表 - 然后就可以了。