Java 在CriteriaBuilder查询中使用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

我正在尝试在标准查询中使用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;
    }
}
但是比较不使用名称,它使用翻译的代码,即使使用
@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);