【问题标题】:creating HQL query for many to many relationship为多对多关系创建 HQL 查询
【发布时间】:2014-04-03 11:38:19
【问题描述】:

如何为多对多关系创建 Hql 查询。我尝试过但没有得到完美的解决方案。所以请帮助我如何编写查询

模型类

@Entity
@Table(name="TBL_STD_USERPROFILE")
public class UserProfile implements Serializable{

    @OrderBy("skillName ASC")
        @ManyToMany(targetEntity=Skills.class,cascade=CascadeType.ALL,fetch=FetchType.EAGER)
        @JoinTable(name="USER_SKILLS",joinColumns=@JoinColumn(name="FLD_USER_ID",referencedColumnName="FLD_USER_ID"),inverseJoinColumns=@JoinColumn(name="FLD_SKILLS_ID",referencedColumnName="FLD_SKILLS_ID"))
        private Set<Skills> skillsList;

}

我的查询

String hql = "from  UserProfile u  join u.skillsList s where s.SkillName='Java' and u.Firstname='xyz'"

技能 Pojo 类我只是检查技能名称。 所以帮助我如何编写查询

public class Skills implements Serializable{

    private static final long serialVersionUID = 1L;
    private Long skillId;
    private String skillName;
    private String skillDesc;
    private Long categoryId;

    public Long getSkillId() {
        return skillId;
    }

    public void setSkillId(Long skillId) {
        this.skillId = skillId;
    }

    public String getSkillName() {
        return skillName;
    }

    public void setSkillName(String skillName) {
        this.skillName = skillName;
    }

    public String getSkillDesc() {
        return skillDesc;
    }

    public void setSkillDesc(String skillDesc) {
        this.skillDesc = skillDesc;
    }

    public Long getCategoryId() {
        return categoryId;
    }

    public void setCategoryId(Long categoryId) {
        this.categoryId = categoryId;
    }

}

【问题讨论】:

  • 能否贴出 Skills 实体类(只是为了检查您是否使用了正确的变量名)
  • 您在 UserProfile 类中有变量 Firstname 吗?我相信它可能是名字或名字.. 也检查一下。
  • 先生,是的,我有相同的变量

标签: mysql spring hibernate hql


【解决方案1】:

在您的查询中,skillName 与您的实体类中的不同。如下更改并尝试。

String hql = "from  UserProfile u  join u.skillsList s where s.skillName='Java' and u.Firstname='xyz'"

还要检查 Firstname 是否与 Userprofile 类中的相同。这也可能是您的问题的原因。

【讨论】:

  • +1。在解决命名问题时,不要命名技能Skills;不要命名Set&lt;Skill&gt; skillsList,而是skillSet;不要命名 ID skillID,而是 id,不要命名描述 skillDesc,而是 description,等等。
  • 先生,我检查过两者都是一样的。以上查询我是作为示例编写的。我在上面尝试了确切的名称,但没有工作
  • 12:04:20,617 错误 [org.hibernate.hql.PARSER] - 第 1:195 行:意外令牌:你...我得到了上述错误
  • 在您的问题本身中粘贴一些错误行并粘贴 UserProfile 类中的 firstname 属性。
  • 来自 UserProfile u where u.systemUser != 'T' and u.isDeletedUser = 'F' and u.domain.primary_Domain_Id = :theDomain and(u.skillsList.skillName = 'java' or u .userOrgInfo.jobTile Like '%java%' or u.userOrgInfo.departmentName Like '%java%' or u.userGeneralInfo.lastName Like '%java%' or u.userGeneralInfo.userName Like '%java%' or u.userGeneralInfo .firstName Like '%java%') 这是我的原始查询,如果我删除技能列表变量它工作正常
猜你喜欢
  • 2013-09-19
  • 2015-03-31
  • 1970-01-01
  • 1970-01-01
  • 2012-05-23
  • 2014-09-03
  • 1970-01-01
  • 2012-12-07
  • 2017-12-24
相关资源
最近更新 更多