1
私は、criteriaQueryにゲッターを使用しようとしています。CriteriaBuilderクエリで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;
}
}
そして、私のダオに私は名前で私のテーマを取得しよう。
criteriaList.add(builder.like(themeRoot.get("name"), "%val%"));
しかし、比較には名前を使用していない、それも@Access(AccessType.PROPERTY)
を使用して翻訳のコードを使用しています。
どうすれば解決できますか?