[英]Q class not generating by query-dsl for nested embedded objects inside document class in spring data
我有以下收藏和嵌入式文件
@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;
.
}
ContactDetails.java 如下所示:
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ContactDetails {
private AddressDetails addressDetails;
private StateDetails stateDetails;
}
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;
}
AddressDetails 如下所示:
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class AddressDetails {
private String address;
@Field(targetType = FieldType.STRING)
private AddressTypeEnum addressType;
}
构建后,我没有收到 AddressDetails 的 Q class,因此我在构建 Predicate 时遇到问题。 下面是我生成的 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);
}
}
下面是生成的 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);
}
}
我提到了许多线程,包括https://querydsl.com/static/querydsl/5.0.0/reference/html/ch03s03.html但仍然无法找出问题。 即使我试过
@QueryInit("*.*")
contactDetails 上面的注释。 任何想法,我失踪的地方。 我不想将 AddressDetails 注释为 @Document。
我发现这个线程Querydsl 4 StringExpression of a field inside a SimplePath这解决了问题,但我仍然对这个概念感到困惑,@QueryEmbeddable 是如何工作的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.