错误:运算符不存在:bigint =布尔Hibernate-JPA

时间:2020-07-30 14:18:46

标签: java postgresql hibernate jpa

我正在尝试使用JPA创建规范,但出现此错误。该数据库是postgres。

这是我要实现的SQL函数

SELECT * FROM Document WHERE datasheet-id in (SELECT datasheet-id FROM datasheet_domain WHERE id_domain in (List<Long>);

这是创建规范的功能

private static final String DATA_SHEET = "dataSheet";
public static Specification<Document> documentHasDomains(final List<Long> domains){
        return (Specification<Document>) (root, query, criteriaBuilder) -> {
            Subquery<Integer> datasheetIds = query.subquery(Integer.class);
            Root<DataSheetDomain> rootDataSheetDomain = datasheetIds.from(DataSheetDomain.class);


            datasheetIds.select(rootDataSheetDomain.get(DATA_SHEET)).
                    where(rootDataSheetDomain.get("domain")).in(domains);


            return criteriaBuilder.in(root.get(DATA_SHEET)).value(datasheetIds);
        };
    }

这里有与该查询有关的实体。

实体DataSheetDomain

@Table(name = "DATA_SHEET_DOMAIN")
public class DataSheetDomain implements Cloneable{

    @Id
    @Column(name="IDDATASHEETDOMAIN")
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "data_sheet_domain_id_sequence")
    @SequenceGenerator(name = "data_sheet_domain_id_sequence", sequenceName = "data_sheet_domain_id_sequence", allocationSize = 1)
    private Long id;

    @ManyToOne
    @JoinColumn(name = "IDDATASHEET")
    @NotNull
    private DataSheet dataSheet;

    @ManyToOne
    @JoinColumn(name = "IDDOMAIN")
    @NotNull
    private Domain domain;

    @Column(name = "PREFERENCEORDER")
    @NotNull
    private Integer preferenceOrder;

    public DataSheetDomain clone() throws CloneNotSupportedException {
        DataSheetDomain dataSheetDomain = (DataSheetDomain) super.clone();
        dataSheetDomain.setId(null);
        return dataSheetDomain;
    }
}

域类

@Table(name = "DOMAIN")
public class Domain {

    @Id
    @Column(name="IDDOMAIN")
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "domain_id_sequence")
    @SequenceGenerator(name = "domain_id_sequence", sequenceName = "domain_id_sequence", allocationSize=1)
    private Long id;

    @Column(name="CODE", length = 10)
    @NotNull
    private String code;

    @Column(name="LABEL", length = 255)
    @NotNull
    private String label;

    @Column(name="DESCRIPTION", length = 1000)
    private String description;

    @OneToMany(mappedBy = "domain", fetch = FetchType.LAZY)
    private List<DomainWorkspace> domainWorkspaceList;

}

谢谢你们的回答,谢谢您抽出宝贵的时间来做。

0 个答案:

没有答案