当前位置: 首页 > 面试题库 >

Hibernate查询ID为外键的字段

翟越
2023-03-14
问题内容

例如,我有两个实体:雇员和地址。在这些实体中,Employee有一个外键AddressID引用了Address上的ID列。在Java域对象中,Hibernate很好地将forgein键整数字段与Address对象字段包装在一起。但是现在,如何查询具有特定AddressID的Employee?

我试图创建一个表别名。这似乎可行,但相当尴尬。

我也曾尝试做这样的事情:

criteria.add(restriction.eq("TheAddressObjectFieldName", 123);

它有时会起作用,但并非总是如此。我不确定这是正确的方法,但我一直希望它能一直保持下去。

那么在hibernate状态下查询外键列的正确方法是什么?


问题答案:

Hibernate仅“巧妙地包装”您告诉它包装的内容。因此,假设您的Employee映射如下所示:

@Entity
public class Employee {
  ...
  @ManyToOne
  @JoinColumn(name="address_id")
  private Address address;
  ...
}

并且您Address拥有一个id属性,则可以address_id通过以下方式进行查询:

session.createCriteria(Employee.class)
 .add(Restrictions.eq("address.id", addressId));

为了基于Address属性进行查询,您必须创建别名或嵌套条件:

session.createCriteria(Employee.class)
 .createAlias("address", "a")
 .add(Restrictions.eq("a.postalCode", postalCode));


 类似资料:
  • 问题内容: 这是有关条款的Elasticsearch官方网站:https : //www.elastic.co/guide/en/elasticsearch/reference/2.1/query-dsl-terms- query.html 如我们所见,如果要进行术语查找机制查询,则应使用如下命令: 但是,如果我想通过其他用户领域进行查询怎么办。假设用户还有其他一些字段,例如名称,我是否可以使用术

  • 问题内容: 我必须使用hibernate模式,并且不太确定如何解决此问题,我有2个具有1..n关系的表,如下所示: 我该如何使用Hibernate进行管理??? 我不知道如何管理第二张表的主键… 问题答案: 在Hibernate参考文档中有一个与您的案例完全相似的示例。在此示例之前,您将找到解释。这是与您的问题匹配的示例(用户是表A,客户是表B): 注意:如果您拥有这两个表的代理标识符,则要简单得

  • 我现在对hibernate有一个很奇怪的问题。在一个表上,它创建了一个引用它自己的外键。该列也是主键。这基本上阻止了我从表中删除任何行。 在日志中我可以看到一行字:

  • 我刚开始冬眠,所以这个问题可能看起来很愚蠢。 由:org.hibernate.queryException:无法解析属性:Application of:xx.xx.xx.xx.xx.compilation[FROM xx.xx.xx.xx.compilation c,其中c.Application.id=:applicationid]在org.hibernate.queryexception.ge

  • 问题内容: 我有这张桌子: 我想使用hibernate机制查询该表(以使用第二个缓存级别)。hibernate查询的结果必须是一个哈希映射,其中键是字段ID,值是字段名称。 我如何用HQL编写它? 如果使用map,则只能使用别名,并且如果对对象使用构造函数,则必须将结果转换为hashmap,这非常耗时。 查询的结果必须是hashmap: 谢谢 问题答案: 这个问题很老,但这可能仍然可以帮助其他人。

  • 我做了一个图书馆管理系统。我正试图打印学生问题书,但SQL查询遇到了问题。下面是用户。用于打印发行书籍的php代码。我也上传了数据库,方便大家参考。请帮忙。 使用者php 以下是图书馆管理系统的数据库。 数据库是这样关联的:-usertable将id作为主键。Book将isbn作为主键,bookid作为外键。类型将bookid作为主键。存折的外键为isbn,主键为uid。我想显示存折,其中会显示存