首页 > 解决方案 > 查询多对多映射列表的注释计数

问题描述

@Entity
@Table(name="DMS_Document_Class")
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class,property = "docClassindexID")
public class DMSDocumentClass {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="DocumentClass_Index_ID")
    private long docClassindexID;


    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(name = "DOCCLASS_GROUP", 
    joinColumns = {@JoinColumn(referencedColumnName ="DocumentClass_Index_ID")}, inverseJoinColumns = {@JoinColumn(referencedColumnName="groupID")})
    @JsonManagedReference
    private List<DMSGroupBean> groups;


    @ManyToMany(mappedBy = "documentClass", fetch = FetchType.LAZY)
    private List<DMSDocument> documents;

DMS 文档类

public class DMSDocument {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="Doc_Index_ID")
    private long docID;

    @OneToOne
    @JoinTable(name = "DOCCLASS_DOCS", 
    joinColumns = {@JoinColumn(referencedColumnName ="Doc_Index_ID")}, 
    inverseJoinColumns = {@JoinColumn(referencedColumnName="DocumentClass_Index_ID")})
    @JsonBackReference
    @JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
    private DMSDocumentClass documentClass;

下面是我尝试查询注释的存储库类

    @Query(value = "SELECT count(D.documents) from DMSDocumentClass D where D.docClassindexID = :classID")
    public Long isDocClassHasDocument(@Param("classID") long classID);

当我尝试执行代码片段时

docClassRepo.isDocClassHasDocument(docClassID);

我得到如下输出

select
        count(.) as col_0_0_ 
    from
        dms_document_class dmsdocumen0_ cross 
    join
        docclass_docs documents1_, dms_document dmsdocumen2_ 
    left outer join
        docclass_docs dmsdocumen2_1_ 
            on dmsdocumen2_.doc_index_id=dmsdocumen2_1_.doc_index_id 
    where
        dmsdocumen0_.document_class_index_id=documents1_.document_class_document_class_index_id 
        and documents1_.doc_index_id=dmsdocumen2_.doc_index_id 
        and dmsdocumen0_.document_class_index_id=?

这里给出的 count(.) 给出了 SQL 语法错误。我想获取特定文档类的文档计数,但它正在写入。在查询中。我应该通过什么来获取与文档类关联的文档数。

标签: spring-bootspring-data-jpaspring-datajpql

解决方案


您可以使用size()

@Query(value = "SELECT size(D.documents) from DMSDocumentClass D where D.docClassindexID = :classID")
public int isDocClassHasDocument(@Param("classID") long classID);

推荐阅读