【问题标题】:working with enum on querydsl在 querydsl 上使用枚举
【发布时间】:2014-09-22 07:10:51
【问题描述】:

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

【问题讨论】:

  • 尝试记录query.from(qDataSourceColumn).where(qDataSourceColumn.columnType.eq(eColumnType.HEAD))).toString()的输出。您将获得 QueryDSL 正在执行的 JPQL。
  • @jmvivo,我将其添加到问题中。对我来说似乎没问题...
  • 我也是。您可以尝试激活 ORM 实现日志以获取更多信息。

标签: jpa querydsl


【解决方案1】:

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

我使用了 PostgreSql,但它不起作用。然后我在 SQL Server 上尝试了它,它工作正常。我检查了两个数据库之间的列定义没有区别。该错误仅发生在使用 QueryDsl 的 Enum 中。

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

【讨论】:

  • 是你的帖子有误还是你真的有这个注释@Column(name="COULMN_TYPE")而不是这个:@Column(name="COLUMN_TYPE")
  • 如果您的意思是COULMN 的拼写错误,那么我记不清了,但我想这是一个错误。
猜你喜欢
  • 1970-01-01
  • 2015-05-23
  • 2023-03-10
  • 2015-09-08
  • 1970-01-01
  • 2018-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多