【发布时间】:2018-04-30 14:15:24
【问题描述】:
我正在尝试在条件查询中使用 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)。
我该如何解决?
【问题讨论】:
标签: java sql hibernate jakarta-ee