Java 如何在HQL中编写联接查询?

Java 如何在HQL中编写联接查询?,java,hibernate,orm,hql,Java,Hibernate,Orm,Hql,我正在尝试运行一个HQL查询,它给我的错误是: org.hibernate.QueryException: could not resolve property: UserType of: EntityPack.UserTypeMenu [from EntityPack.UserTypeMenu as utm ,EntityPack.UserType as ut where utm.UserType.userTypeId=ut.userTypeId and ut.userTypeDesc

我正在尝试运行一个HQL查询,它给我的错误是:

org.hibernate.QueryException: could not resolve property:
UserType of: EntityPack.UserTypeMenu 
[from EntityPack.UserTypeMenu as utm ,EntityPack.UserType as ut 
 where utm.UserType.userTypeId=ut.userTypeId and ut.userTypeDesc like ' %ad%' ]
这是我编写查询的函数:



    public ObservableList PostTableusertypemenu(String search, int q) {
            ObservableList data;
            data = FXCollections.observableArrayList();
            List ll=null;
                 ll = pop.UrviewTable("from UserTypeMenu as utm ,UserType as ut "+
                                      "where utm.UserType.userTypeId=ut.userTypeId"+
                                    " and ut.userTypeDesc like ' %"+ search +"%' ");
            Iterator ite = ll.iterator();
            while (ite.hasNext()) {
                UserTypeMenu obj = (UserTypeMenu) ite.next();
                data.add(obj);
            }  
            return data;
        }

我的UserType实体类:


    @Entity
    @Table(name = "user_type")
    public class UserType {
            @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        @Basic(optional = false)
        @Column(name = "User_Type_Id")
        private Integer userTypeId;
        @Basic(optional = false)
        @Column(name = "User_Type")
        private String userType;
        @Basic(optional = false)
        @Column(name = "User_Type_Desc")
        private String userTypeDesc;
        @Basic(optional = false)
        @Column(name = "Status")
        private String status;
          @Basic(optional = false)
        @Column(name = "Markers")
        private String markers;
    }



    @Entity
    @Table(name = "user_type_menu")
    @NamedQueries({
        @NamedQuery(name = "UserTypeMenu.findAll", query = "SELECT u FROM UserTypeMenu u")})
    public class UserTypeMenu implements Serializable {
        private static final long serialVersionUID = 1L;
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        @Basic(optional = false)
        @Column(name = "User_Type_Menu_Id")
        private Integer userTypeMenuId;
        @Basic(optional = false)
        @Column(name = "Status")
        private String status;
        @Basic(optional = false)
        @Column(name = "Markers")
        private String markers;
        @ManyToOne(optional = false)
        private UserType userType;
        @ManyToOne(optional = false)
        private UserMenuMaster userMenuMaster;
        @ManyToOne(optional = false)
        private UserMenuBar userMenuBar;
    }

UserTypeMenu实体类:


    @Entity
    @Table(name = "user_type")
    public class UserType {
            @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        @Basic(optional = false)
        @Column(name = "User_Type_Id")
        private Integer userTypeId;
        @Basic(optional = false)
        @Column(name = "User_Type")
        private String userType;
        @Basic(optional = false)
        @Column(name = "User_Type_Desc")
        private String userTypeDesc;
        @Basic(optional = false)
        @Column(name = "Status")
        private String status;
          @Basic(optional = false)
        @Column(name = "Markers")
        private String markers;
    }



    @Entity
    @Table(name = "user_type_menu")
    @NamedQueries({
        @NamedQuery(name = "UserTypeMenu.findAll", query = "SELECT u FROM UserTypeMenu u")})
    public class UserTypeMenu implements Serializable {
        private static final long serialVersionUID = 1L;
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        @Basic(optional = false)
        @Column(name = "User_Type_Menu_Id")
        private Integer userTypeMenuId;
        @Basic(optional = false)
        @Column(name = "Status")
        private String status;
        @Basic(optional = false)
        @Column(name = "Markers")
        private String markers;
        @ManyToOne(optional = false)
        private UserType userType;
        @ManyToOne(optional = false)
        private UserMenuMaster userMenuMaster;
        @ManyToOne(optional = false)
        private UserMenuBar userMenuBar;
    }

我想要的是根据Usertype描述从UsertypeMenu获取数据

请帮帮我。。
谢谢。:)

不像在SQL中那样在HQL中编写联接,而是使用
符号在对象图中导航。试试这个

"from UserTypeMenu as utm where utm.userType.userTypeDesc like ' %"+ search +"%' "
实际上,您可以直接在关联上使用联接。下面是相同的查询,但使用联接语法

"from UserTypeMenu as utm join utm.userType ut where ut.userTypeDesc like ' %"+ search +"%' "

这里使用连接的好处是,例如,如果关系不是强制性的,并且您不想因为使用
时隐式使用的
内部连接而丢失任何结果,您可以指定
左连接

您能给我推荐任何网站,帮助我更详细地了解hql吗当然,最好的地方是。当然,由于HQL是JPQL的扩展,您也可以检查。它是givimg me java.lang.ClassCastException:[Ljava.lang.Object;无法强制转换为EntityPack.UserTypeMenu此错误。在UserTypeMenu obj=(UserTypeMenu)ite.next();data.add(obj);您必须发布
pop.UrviewTable()的代码
“公共列表UrviewTable(字符串sQuery){session=sf.sesFactory.openSession();session.beginTransaction();Query qee1=session.createQuery(sQuery);List ll=qee1.List();session.getTransaction().commit();session.close();}”