Hibernate - 如何使用两个主键从表中检索数据

时间:2014-02-18 05:29:30

标签: hibernate

我的表名是store_record。它有“代码”和“状态”是两个主键。在hibernate中,我为该表创建了持久化类。它创建了两个类,第一类有代码和状态setter和getter方法,另一类有第一类对象,剩下的表字段有setter和getter方法。现在我的问题是我想只使用一个主键(如代码)从该表中获取数据如何在hibernate中为此问题编写查询。

我的桌子就像这样

           desc branches;
+----------------------+-------------+------+-----+---------+-------+
| Field                | Type        | Null | Key | Default | Extra |
+----------------------+-------------+------+-----+---------+-------+
| cod_ifsc_bank_branch | varchar(24) | NO   | PRI | NULL    |       |
| txt_bank_branch_name | varchar(24) | YES  |     | NULL    |       |
| cod_rec_status       | char(1)     | NO   | PRI | A       |       |
| txt_last_maker_id    | varchar(16) | YES  |     | NULL    |       |
| dat_last_maker       | date        | YES  |     | NULL    |       |
|       |
+----------------------+-------------+------+-----+---------+-------+
该表中的

有两个主键,一个是'cod_ifsc_bank_branch',另一个是'cod_rec_status'。但我想使用一个主键获取数据就像'cod_ifsc_bank_branch'现在如何在hibernate中为这个问题编写查询

提前谢谢 DNMurthy

1 个答案:

答案 0 :(得分:0)

它不是2主键,实际上是复合键。并且,两个值组合在一起时会为您提供主键。

您应该只为实体映射一个类,并为复合ID设置另一个类(如果使用特定于Hibernate的功能,则可以省略它)。

作为主键一部分的属性与其他普通属性没有区别,您可以将其用作查询条件,就像其他普通属性一样。例如:

(不是非常准确的映射,只是给你一个想法)

@Entity
class Foo {
  @EmbededId
  private FooId id;

  @Column(updatable=false, insertable=false)
  private String code;    // part of the ID, but you may also map it again with 
                          // updatable, insertable = false

  @Column(updatable=false, insertable=false)
  private FooStatus status;  // Ditto
}

@Embeddable
class FooId {
  @Column
  String code;

  @Column
  FooStatus status;
}

那么你可以这样查询:

from Foo where foo.code = 'SOME_CODE'

甚至(未经测试,我认为它可能有用)

from Foo where foo.id.code = 'SOME_CODE'