spring-data-jpa jHipster在规范中使用enum来查找仅具有一个具体Enum值实体

unhi4e5o  于 2022-11-10  发布在  Spring
关注(0)|答案(1)|浏览(198)

还有 实体 :

@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));

格式
并 将 DocumentCriteriadocumentStatus 字段 类型 更改 为 RangeFilter
运行 应用 程序 时 , 上述 选项 似乎 不 起 作用 。

noj0wjuj

noj0wjuj1#

解决方法:

RangeFilter<DocumentStatus> globalStringFilter = new RangeFilter<DocumentStatus>();
        List<DocumentStatus> documentStatuses = new ArrayList<>();
        documentStatuses.add(DocumentStatus.A);
        globalStringFilter.setIn(documentStatuses);
        specification=specification.and(buildRangeSpecification(globalStringFilter, DocumentEntity_.documentStatus));

并将DocumentCriteriadocumentStatus字段类型更改为RangeFilter
确保存在specification=,以便使用该结果。

相关问题