gpt4 book ai didi

java - 在 CriteriaBuilder 查询中使用 getter

转载 作者:太空宇宙 更新时间:2023-11-04 10:55:48 25 4
gpt4 key购买 nike

我正在尝试在 criteriaQuery 中使用 getter。

我有一个翻译类和一个主题类。我想搜索具有翻译值的主题,而不是翻译键。

这是我的代码:

@Entity
public class Translation implements Serializable{
private static final long serialVersionUID = -6216704909713037946L;
static final String DEFAULT_LOCALE = "EN";
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;

@NaturalId
private String code;

private String locale;

private String value;

public Translation() {}

public String getCode() {
return code;
}

public void setCode(String code) {
this.code = code;
}

public String getLocale() {
return locale;
}

public void setLocale(String locale) {
this.locale = locale;
}

public String getValue() {
return value;
}

public void setValue(String value) {
this.value = value;
}

public static String geTranslatedValue(Map<String, Translation> translations) {
if(translations.containsKey(LocaleContextHolder.getLocale().getCountry()))
return translations.get(LocaleContextHolder.getLocale().getCountry()).getValue();
else if(translations.containsKey(Translation.DEFAULT_LOCALE))
return translations.get(Translation.DEFAULT_LOCALE).getValue();
return null;
}
}


@Entity
@Access(AccessType.PROPERTY)
public class Theme implements Serializable{
private Map<String, Translation> names;

private String name;

public Theme() {
this.names = new HashMap<>();
}

@JoinColumn(name = "code", referencedColumnName = "name")
@OneToMany(fetch = FetchType.EAGER)
@MapKey(name = "locale")
@JsonIgnore
public Map<String, Translation> getNames() {
return names;
}

public void setNames(Map<String, Translation> names) {
this.names = names;
}

@Column(name="name")
public String getName() {
return Translation.geTranslatedValue(this.names);
}

public void setName(String name) {
this.name = name;
}
}

在我的 Dao 中,我尝试通过名称来获取我的主题。

criteriaList.add(builder.like(themeRoot.get("name"), "%val%"));

但比较不使用名称,它使用翻译的代码,即使使用 @Access(AccessType.PROPERTY)

我该如何解决这个问题?

最佳答案

您可以通过将以下内容添加到依赖项来使用 jpa 元模型

<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
</dependency>

您现在可以使用生成的 jpa 元模型类,如下所示

builder.like(themRoot.get(Theme_.name), val);

请参阅此处的第 2.4 节: https://docs.spring.io/spring-data/jpa

关于java - 在 CriteriaBuilder 查询中使用 getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47339866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com