如何才能正确实现获取对象列表的Hibernate NamedQuery?

时间:2015-03-06 13:49:29

标签: java sql hibernate java-ee jpa

我在Hibernate中绝对是新的,我有以下情况,我不知道如何处理。

所以我有这两个实体类:

  1. KMCountryArea ,用于映射我的数据库上的 KM_COUNTRY_AREA 表:

    @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
    }
    
  2. KMCountry ,在我的数据库上映射 KM_COUNTRY 表:

    @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
    }
    
  3. 所以,正如您所看到的,进入 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个表和命名查询)或者我错过了什么?

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

    TNX

1 个答案:

答案 0 :(得分:0)

你有

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

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

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