在休眠中使用布尔字段获取值

getting values using Boolean field in hibernate

我正在使用 postgres,我有一个 table 如下,

    CREATE TABLE entity_transaction
    (
      id bigint NOT NULL DEFAULT nextval('entity_transactionid_seq'::regclass),
      transaction_ref character varying(11) NOT NULL,
      transaction_type character varying(10) NOT NULL,
      is_remitted boolean DEFAULT false);

我为 table 创建了一个模型 class。

    @Entity
    @Table(name = "entity_transaction")
    public class Transaction implements Serializable {

        private static final long serialVersionUID = 1L;

        @Id
        @Column(name = "id")
        Long id;

        @Column(name = "transaction_ref")
        String transactionRef;

        @Column(name = "transaction_type")
        String transactionType;

        @Column(name = "is_remitted")
        Boolean isRemitted;

我只是想从 table 使用 "isRemitted" 字段获取值是真还是假。为此,我正在尝试以下查询

    @Repository(value = "collectionsRepositary")
    public class CollectionsRepositoryImpl implements CollectionsRepository {

        @Resource
        private SessionFactory sessionFactory;

        @Override
        public List<Transaction> getUnmatchedList() {
            Query query = createQuery("select t from Transaction where t.transactionType = 'c' and t.isRemitted is true");      
            return query.list();
        }

        public Query createQuery(String queryString) {
            return getSession().createQuery(queryString);
        }

        private Session getSession() {
            return sessionFactory.getCurrentSession();
        }
    }       

但是我无法获取返回空列表的值。 table 中有可用的数据,具有此布尔值和 transactionType。

谁能告诉我正确的方法?

提前致谢,

不确定,但 is true 对我来说听起来很特别。 我认为您的查询应该适用于 = true.

编辑:抱歉,我没看到,您的查询应该如下所示:

select t from Transaction t where t.transactionType = 'c' and t.isRemitted = true

而不是这个:

select t from Transaction t.transactionType = 'c' and t.isRemitted is true

缺少 where

检查生成的查询; Hibernate 应该将 java.lang.Boolean 映射为 BIT,并且 PG boolean 可能不是 BIT,而是类似(但不同)的类型(例如 TINYINT)。
根据我的经验,我总是使用 tinyiny 或自定义类型映射布尔字段;检查 SO。