【问题标题】:How to write HQL Query for multiple entities如何为多个实体编写 HQL 查询
【发布时间】:2015-06-24 05:39:26
【问题描述】:

我正在尝试编写一个 HQL 查询来获取记录的 id。但查询给了我这个错误

org.hibernate.QueryException:无法解析属性:CompanyMaster of:EntityPack.UserTypeMenuBarComp [从 EntityPack.UserTypeMenuBarComp 中选择 userTypeMenuBar.userMenuBar.menuBarId 作为 UserTypeMenuBarComp 其中 UserTypeMenuBarComp.companyGroupMaster.companyGroupId=4 和 UserTypeMenuBarComp.CompanyMaster.companyMasterId=2 和UserTypeMenuBarComp.userTypeMenuBar.userType.userTypeId=2]

这是我的查询:

select userTypeMenuBar.userMenuBar.menuBarId FROM UserTypeMenuBarComp as UserTypeMenuBarComp where UserTypeMenuBarComp.companyGroupMaster.companyGroupId=" + 
    UsercompGid(LoginImpl.masterid) +
     " and UserTypeMenuBarComp.CompanyMaster.companyMasterId=" + 
    Usercompid(LoginImpl.masterid) +
     " and UserTypeMenuBarComp.userTypeMenuBar.userType.userTypeId=" + 
    LoginImpl.usertypid + ""

这里是实体类(UserTypeMenuCompany):

@Entity
public class UserTypeMenuCompany implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Basic(optional = false)
    @Column(name = "User_Type_Menu_Company_Id")
    private Integer userTypeMenuCompanyId;
    @Basic(optional = false)
    @Column(name = "Status")
    private String status;
    @Column(name = "Markers")
    private String markers;
    @ManyToOne(optional = false)
    private UserTypeMenu userTypeMenu;
    @ManyToOne(optional = false)
    private CompanyMaster companyMaster;
    @JoinColumn(name = "Company_Group_Id", referencedColumnName = "Company_Group_Id")
    @ManyToOne(optional = false)
    private CompanyGroupMaster companyGroupMaster;

(用户类型菜单栏)

public class UserTypeMenuBar implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Basic(optional = false)
    @Column(name = "User_Type_Menu_Bar_Id")
    private Integer userTypeMenuBarId;
    @Basic(optional = false)
    @Column(name = "Status")
    private String status;
    private String markers;
    //@JoinColumn(name = "User_Type_Id", referencedColumnName = "User_Type_Id")
    @ManyToOne(optional = false)
    private UserType userType;
   // @JoinColumn(name = "Menu_Bar_Id", referencedColumnName = "Menu_Bar_Id")
    @ManyToOne(optional = false)
    private UserMenuBar userMenuBar;

(用户菜单栏)

public class UserMenuBar implements Serializable  {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Basic(optional = false)
    @Column(name = "Menu_Bar_Id")
    private Integer menuBarId;
    @Basic(optional = false)
    @Column(name = "Menu_Bar_Desc")
    private String menuBarDesc;
    @Basic(optional = false)
    @Column(name = "Status")
    private String status;

    @Basic(optional = false)
    @Column(name = "Markers")
    private String markers;

和(用户类型)

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;

【问题讨论】:

  • 你好@Chirag Kamat,你解决了你在问题中提到的错误还是你仍然遇到错误??

标签: hibernate orm hql hibernate-mapping


【解决方案1】:

除了@Popandopolos 的回答,我认为在您的查询中使用 join 会对您有所帮助。

请访问Associations and joins 上的休眠文档以获取更多信息

如果您使用的是休眠查询,那么我认为您的查询如下所示

select userTypeMenuBar.userMenuBar.menuBarId FROM UserTypeMenuBarComp as UserTypeMenuBarComp 
inner join UserTypeMenuBarComp.companyGroupMaster 
inner join UserTypeMenuBarComp.CompanyMaster
inner join UserTypeMenuBarComp.userTypeMenuBar.userType
where UserTypeMenuBarComp.companyGroupMaster.companyGroupId=" + 
    UsercompGid(LoginImpl.masterid) +
     " and UserTypeMenuBarComp.CompanyMaster.companyMasterId=" + 
    Usercompid(LoginImpl.masterid) +
     " and UserTypeMenuBarComp.userTypeMenuBar.userType.userTypeId=" + 
    LoginImpl.usertypid + ""

【讨论】:

    【解决方案2】:

    根据HQL referenceJava 类和属性区分大小写

    除了 Java 类和属性的名称,查询不区分大小写。所以 SeLeCT 和 sELEct 和 SELECT 一样,但是 org.hibernate.eg.FOO 不是 org.hibernate.eg.Foo, foo.barSet 不是 foo.BARSET。

    所以您需要在此处修复您的查询: UserTypeMenuBarComp.companyMaster.companyMasterId - companyMaster 应该以小写字母 c

    开头

    【讨论】:

      猜你喜欢
      • 2011-04-18
      • 1970-01-01
      • 1970-01-01
      • 2016-01-17
      • 2017-07-27
      • 2014-03-18
      • 1970-01-01
      • 1970-01-01
      • 2019-06-12
      相关资源
      最近更新 更多