我在Hibernate中是一个陌生的人,遇到以下情况,我不知道如何处理。

所以我有这两个实体类:


在我的数据库上映射KM_COUNTRY_AREA表的KMCountryArea:

@NamedQueries({
    @NamedQuery(name = "kmCountryByName", query = "SELECT country FROM KMCountryArea country WHERE country.nomeFolder  = :nomeFolder order by country.idCountryArea")
})

@Entity
@Table(name = "KM_COUNTRY_AREA")
public class KMCountryArea implements Serializable {

    @Id
    @GeneratedValue
    private Long idCountryArea;

    @Column(name = "nomeFolder")
    private String nomeFolder;

    @OneToOne
    private KMCountry country;

    // GETTER & SETTER METHODS
}

将KM_COUNTRY表映射到我的数据库的KMCountry:

@Entity
@Table(name = "KM_COUNTRY")
public class KMCountry implements Serializable {

    @Id
    @GeneratedValue
    private Long idCountry;

    @Column(name = "country")
    private String name;

    @Column(name = "workingHours")
    private String workingHours;

    // GETTER & SETTER METHODS
}



因此,如您所见,在KMCountryArea类中,我具有与KMCountry实体类的实例相关联的KMCountry国家/地区字段。

为此,我使用了@OneToOne批注

@OneToOne
private KMCountry country;


据我了解,在我数据库的KM_COUNTRY_AREA表中,我将有一个包含KMCountry id(idCountry)的字段。是对的还是我错过了什么?

如果现在正确,那么我的问题是我需要创建一个命名查询,该查询给出KMCountryArea的nomeFolder字段的值,它将检索所有相关KMCountry对象的列表。

我正在尝试做这样的事情(在目前的工作阶段我无法尝试,而且我不确定这是否是正确的方法):

@NamedQueries({
    @NamedQuery(name = "kmCountryByName", query = "SELECT country FROM KMCountryArea country WHERE country.nomeFolder  = :nomeFolder order by country.idCountryArea")
})


是我所有的推理正确(如何绑定2个表和命名查询)还是我遗漏了一些东西?

拜托,您能帮我完成这项任务吗?

特纳克斯

最佳答案

你有

"SELECT country FROM KMCountryArea country WHERE country.nomeFolder = :nomeFolder order by country.idCountryArea"


并且您不能将“ country”作为KMCountryArea的别名...,因为该类的字段名为“ country”。例如,仅使用别名“ c” ...

SELECT c FROM KMCountryArea c WHERE c.nomeFolder = :nomeFolder order by c.idCountryArea

10-02 09:39