QueryDSL 中有没有办法在查询字符串中使用 JsonProperty 名称而不是字段名称

Is there a way in QueryDSL to use JsonProperty Names in the query string instead of field names

首次创建实体 类 时,它们在 JPA 中建模以匹配数据库字段名称。对于我们的其余端点,我们使用 JsonProperty 来让 Jackson 自动映射客户端期望它们是 kabob 大小写的名称。然而,我们现在正在实现搜索功能,并使用 QueryDSL 构建它。只要我们使用内部字段名称,它就可以正常工作。

不过,我们要做的是接受具有 JsonProperty 名称的查询字符串。

赞:campaign-grouping-code=123 对比 groupingCode=123

我假设它可能必须在生成的 Q 类 中完成,但找不到太多关于它们的文档。

@Column(name = "GROUPING_CODE")
private String groupingCode;

@JsonProperty("campaign-grouping-code")
@NotBlank(message = "1", groups = CampaignFieldCheck.class)
@Size(max = 40, message = "100", groups = CampaignFieldCheck.class)
public String getGroupingCode() {
    return groupingCode;
}

public void setGroupingCode(String groupingCode) {
    this.groupingCode = groupingCode;
}

很简单:不,那是不可能的,因为 Spring 数据端点使用元模型中属性的值,在 querydsl-jpa 的情况下,它始终是 JPA 属性名称,它又从字段名称派生,并且 - 不是 Java 字段名称中的有效字符。

所以没有办法让 json 属性名称起作用。有一个解决别名的方法。在此 link 中,您可以找到黑名单和白名单设置。别名自动列入白名单。但是可以通过对字段名称有意义的任何文本字符串来映射别名。

https://gt-tech.bitbucket.io/spring-data-querydsl-value-operators/README.html