java - 如何在 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 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;
    }

UserTypeMenu 实体类:



    @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 获取数据。

请帮帮我.. 谢谢。 :)

最佳答案

您不必像在 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 +"%' "

此处使用联接的好处是,例如,如果关系不是强制性的并且您不想因为内联接而丢失任何结果,则可以指定左联接 当您使用 ..

时隐式使用

关于java - 如何在 HQL 中编写连接查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29621116/

相关文章:

orm - 如何在 jpql 查询中仅查询父类(super class)实体?

java - 如何将源文件和类文件转换为小程序的 1 个可执行文件?

java - JPA 和 toplink create-table 如果它们尚不存在?

java - Amazon S3 预签名 URL 转义 key 中的斜杠

hibernate - 实体比较如何在 JPQL WHERE 子句中工作?

java - 在 hibernate 查询中返回通用对象而不是类实体

java - 无法解析 'javax.persistence.EntityManager' 的 bean

ruby - 动态生成 ORM 类

java - 通过 setVisible 隐藏/显示的 JFrame 的窗口事件?

java - 如何选择一个随机数并保存它?