【问题标题】:creating hql query for one-to-many relationship为一对多关系创建 hql 查询
【发布时间】:2013-09-19 00:11:33
【问题描述】:

我有两个类 Domain 和 UserProfile 。它们之间的关系是一对多的。它在 UserProfile 类中定义。我有用户和域对象的名字我必须编写 hql 查询来检索 UserProfile 对象。 我创造了这样 "从 UserProfile 作为配置文件,其中 profile.domain='"+domain+"' 和 profile.firstName ='"+firstName+"'"。但它不起作用。

谁能告诉我应该如何查询。

@Entity
@Table(name="TBL_STD_DOMAIN")
public class Domain implements Serializable {

  @Id
  @GeneratedValue
  @Column(name ="FLD_DOMAIN_ID")
  private Long domainId;

  @Column(name = "FLD_DOMAIN_NAME")
  private String domainName;
}


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

  @Id
  @GeneratedValue
  @Column(name = "FLD_USER_ID")
  private Long userId;

  @Column(name = "FLD_First_Name")
  private FirstName firstName;

  @ManyToOne
  private Domain domain;
}

【问题讨论】:

    标签: hibernate hql


    【解决方案1】:

    您永远不应该使用字符串连接将参数传递给查询。改用查询参数(命名,最好):

    String hql = 
        "select u from UserProfile u"
        + " where u.firstName = :theFirstName"
        + " and u.domain = :theDomain";
    
    return session.createQuery(hql)
                  .setParameter("theFirstName", firstName)
                  .setParameter("theDomain", domain)
                  .list();
    

    【讨论】:

    • 它正在工作,但我有一个疑问,hql 查询以“from”关键字而不是“select”关键字开头。?我是对还是错。?我看到hql查询以from开头。如果我们以select关键字开头就可以了。
    • 您可以省略 select 子句,但我更喜欢始终指定它,以明确声明选择的内容。在 JPQL(这是标准的 JPA 查询语言,HQL 是其中的一种实现)中,select 子句是强制性的。
    猜你喜欢
    • 1970-01-01
    • 2015-03-31
    • 1970-01-01
    • 2012-12-07
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    • 2012-05-23
    • 2014-09-03
    相关资源
    最近更新 更多