【问题标题】:Query annotation count of list for many to many mapping查询多对多映射列表的注释计数
【发布时间】:2020-08-29 20:58:01
【问题描述】:
@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);

当我尝试执行代码 sn-p

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 语法错误。我想获取特定文档类的文档数量,但它正在写入。在查询中。我应该传递什么来获取与文档类关联的文档数。

【问题讨论】:

  • 您有什么要求不清楚?同时描述您的要求
  • Document_class 有列表。我需要查询注释中单个 do ument_class 下的文档计数。
  • 你到底要数什么?

标签: spring-boot spring-data-jpa spring-data jpql


【解决方案1】:

您可以使用size()

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

【讨论】:

  • 如果不使用本机查询,我什至不知道他的存在。现在我需要去了解选择中允许的其他内容
猜你喜欢
  • 2013-09-10
  • 2015-08-20
  • 1970-01-01
  • 2020-12-19
  • 1970-01-01
  • 2019-04-07
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
相关资源
最近更新 更多