简体   繁体   English

Q class spring 数据中的文档 class 中的嵌套嵌入对象不由查询 dsl 生成

[英]Q class not generating by query-dsl for nested embedded objects inside document class in spring data

I have below collection and embedded documents我有以下收藏和嵌入式文件

    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @Document(collection = "person_details")
    public class PersonDetails {
    
        @MongoId(FieldType.OBJECT_ID)
        private String managerId;
        .
        .
        @QueryInit("addressDetails.*")
        private List<ContactDetails> contactDetails;
        .
 }

And ContactDetails.java looks like below: ContactDetails.java 如下所示:

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ContactDetails {
    private AddressDetails addressDetails;
   
    private StateDetails stateDetails;
}

StateDetails look like below: StateDetails 如下所示:

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
@Document(collection = "statedetails")
public class StateDetails {
    @MongoId(FieldType.OBJECT_ID)
    private String stateId;
    private String stateName;
}

And AddressDetails look like below: AddressDetails 如下所示:

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class AddressDetails {
    private String address;
    @Field(targetType = FieldType.STRING)
    private AddressTypeEnum addressType;
}

After building, I am not getting Q class for AddressDetails, due to which I am facing issues in building Predicate.构建后,我没有收到 AddressDetails 的 Q class,因此我在构建 Predicate 时遇到问题。 Below is my generated QPersonDetail class下面是我生成的 QPersonDetail class

@Generated("com.querydsl.codegen.DefaultEntitySerializer")
public class QPersonDetails extends EntityPathBase<PersonDetails> {

    private static final long serialVersionUID = 184263140L;

    private static final PathInits INITS = new PathInits("*", "contactDetails.addressDetails.*");

    public static final QPersonDetails managerDetails = new QPersonDetails("managerDetails");

   
    public final ListPath<ContactDetails, QContactDetails> contactDetails = this.<ContactDetails, QContactDetails>createList("contactDetails", ContactDetails.class, QContactDetails.class, INITS.get("contactDetails"));

    
    public QPersonDetails(String variable) {
        this(PersonDetails.class, forVariable(variable), INITS);
    }

    public QPersonDetails(Path<? extends PersonDetails> path) {
        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
    }

    public QPersonDetails(PathMetadata metadata) {
        this(metadata, PathInits.getFor(metadata, INITS));
    }

    public QPersonDetails(PathMetadata metadata, PathInits inits) {
        this(PersonDetails.class, metadata, inits);
    }
}

And below is generated QContactDetails:下面是生成的 QContactDetails:

@Generated("com.querydsl.codegen.DefaultEmbeddableSerializer")
public class QContactDetails extends BeanPath<ContactDetails> {

    private static final long serialVersionUID = 1039545873L;

    private static final PathInits INITS = PathInits.DIRECT2;

    public static final QContactDetails contactDetails = new QContactDetails("contactDetails");

    public final SimplePath<AddressDetails> addressDetails = createSimple("addressDetails", AddressDetails.class);

   
    public QContactDetails(String variable) {
        this(ContactDetails.class, forVariable(variable), INITS);
    }

    public QContactDetails(Path<? extends ContactDetails> path) {
        this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
    }

    public QContactDetails(PathMetadata metadata) {
        this(metadata, PathInits.getFor(metadata, INITS));
    }

    public QContactDetails(PathMetadata metadata, PathInits inits) {
        this(ContactDetails.class, metadata, inits);
    }
}

I referred many threads including https://querydsl.com/static/querydsl/5.0.0/reference/html/ch03s03.html but still not able to figure out issue.我提到了许多线程,包括https://querydsl.com/static/querydsl/5.0.0/reference/html/ch03s03.html但仍然无法找出问题。 Even i tried with即使我试过

@QueryInit("*.*")

annotation on contactDetails, above. contactDetails 上面的注释。 Any idea, where I am missing.任何想法,我失踪的地方。 I dont want AddressDetails to be annotated as @Document.我不想将 AddressDetails 注释为 @Document。

I found this thread Querydsl 4 StringExpression of a field inside a SimplePath This solves theproblem, but I am still confused with the concept, how @QueryEmbeddable works我发现这个线程Querydsl 4 StringExpression of a field inside a SimplePath这解决了问题,但我仍然对这个概念感到困惑,@QueryEmbeddable 是如何工作的

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM