还有 实体 :
@Getter
@Setter
@ToString()
@Entity
@Table
@Builder
@NoArgsConstructor
@AllArgsConstructor
class DocumentEntity implements Serializable {
(...)
@Enumerated(EnumType.STRING)
public DocumentStatus documentStatus;
}
中 的 每 一 个
我 有 可 序列 化 类 :
@Data
@NoArgsConstructor
public class DocumentCriteria implements Serializable, Criteria {
private StringFilter documentStatus;
(...)
}
格式
和 自动 生成 类 :
@Generated(value = "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor")
@StaticMetamodel(DocumentEntity.class)
public abstract class DocumentEntity_ {
public static volatile SingularAttribute<DocumentEntity, DocumentStatus> documentStatus;
public static final String DOCUMENT_STATUS = "documentStatus";
(...)
}
格式
是 简单 的 :
public enum DocumentStatus {
A,
B
}
格式
我 想 添加 specification
, 我 只 搜索 DocumentStatus
设置 为 A
的 实体 :
private Specification<DocumentEntity> createSpecification(DocumentCriteria criteria) {
Specification<DocumentEntity> specification = Specification.where(null);
if (criteria != null) {
StringFilter globalStringFilter = new StringFilter();
globalStringFilter.setContains(DocumentStatus.A.name());
specification.and(buildStringSpecification(globalStringFilter, DocumentEntity_.documentStatus));
格式
我 这里 有 一 个 错误 , 说 :
Required type:
SingularAttribute
<? super DocumentEntity,
String>
Provided:
SingularAttribute
<DocumentEntity,
DocumentStatus>
格式
如何 搜索 ?
我 也 试探 着 :
specification = specification.and(buildSpecification(criteria.getDocumentStatus(), DocumentStatus.A.name());
格式
但 它 说 :
Cannot resolve method 'buildSpecification(StringFilter, String)
格式
即使 数据 库 类型 是 varchar
, 我 是否 应该 使用 StringFilter
以外 的 其他 类型 ?
尝试 使用 字符 串 时 会 出现 以下 情况 :DocumentStatus.A.name()
在 这里 没有 帮助 吗 ?
我 脑海 中 出现 的 另 一 个 选择 是 写 这样 的 东西 :
RangeFilter<DocumentStatus> globalStringFilter = new RangeFilter<DocumentStatus>();
List<DocumentStatus> documentStatuses = new ArrayList<>();
documentStatuses.add(DocumentStatus.A);
globalStringFilter.setIn(documentStatuses);
specification.and(buildRangeSpecification(globalStringFilter, DocumentEntity_.documentStatus));
格式
并 将 DocumentCriteria
documentStatus
字段 类型 更改 为 RangeFilter
。
运行 应用 程序 时 , 上述 选项 似乎 不 起 作用 。
1条答案
按热度按时间noj0wjuj1#
解决方法:
并将
DocumentCriteria
documentStatus
字段类型更改为RangeFilter
。确保存在
specification=
,以便使用该结果。