Java 在CriteriaBuilder查询中使用getter
我正在尝试在标准查询中使用getter 我有一节翻译课和一节主题课。我想搜索一个主题是转换值,而不是翻译键 这是我的密码:Java 在CriteriaBuilder查询中使用getter,java,sql,hibernate,jakarta-ee,Java,Sql,Hibernate,Jakarta Ee,我正在尝试在标准查询中使用getter 我有一节翻译课和一节主题课。我想搜索一个主题是转换值,而不是翻译键 这是我的密码: @Entity public class Translation implements Serializable{ private static final long serialVersionUID = -6216704909713037946L; static final String DEFAULT_LOCALE = "EN"; @Id
@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;
}
}
但是比较不使用名称,它使用翻译的代码,即使使用@Access(AccessType.PROPERTY)
我如何解决它呢?您可以通过在依赖项中添加以下内容来使用jpa元模型
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
</dependency>
见第2.4节:
您可以通过向依赖项添加以下内容来使用jpa元模型
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
</dependency>
见第2.4节:
builder.like(themRoot.get(Theme_.name), val);