在休眠中使用布尔字段获取值
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。
我正在使用 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。