【问题标题】:Hibernate - How to retrieve data from table with two primary keysHibernate - 如何使用两个主键从表中检索数据
【发布时间】:2014-02-18 05:29:29
【问题描述】:

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

我的桌子是这样的

描述分支; +----------+-------------+------+-- +---------+--------+ |领域 |类型 |空 |钥匙 |默认 |额外 | +----------+-------------+------+-- +---------+--------+ | cod_ifsc_bank_branch | varchar(24) |否 |优先级 |空 | | | txt_bank_branch_name | varchar(24) |是 | |空 | | | cod_rec_status |字符(1) |否 |优先级 |一个 | | | txt_last_maker_id | varchar(16) |是 | |空 | | | dat_last_maker |日期 |是 | |空 | | | | +----------+-------------+------+-- +---------+--------+

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

提前致谢 DN穆尔蒂

【问题讨论】:

  • 我假设第一个类是第二个类的父类,但请添加您的代码类。
  • @eduardohl:这不是重复的,OP 只想通过 kay 的一部分进行查询(引用:“仅使用一个主键(如代码)”)。
  • 它不是 2 个主键,它实际上是一个复合键。而且,将这两个值组合在一起时会为您提供主键。

标签: hibernate


【解决方案1】:

它不是 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'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多