【问题标题】:Hibernate mapping with partitioned MySQL tables使用分区 MySQL 表的 Hibernate 映射
【发布时间】:2012-10-29 09:32:55
【问题描述】:

我有一个 MySQL 数据库,其中(大多数)表在 TENANT_ID 列上进行分区。每个表还有一个使用 AUTO_INCREMENT 的 ID 字段,因此在所有分区中都是唯一的。数据库主键是一个组合(ID,TENANT_ID),因为 MySQL 要求分区列是主键的一部分。

在我的 Java 代码中,我只映射了带有 @Id 注释的 ID 列。这主要是为了避免 Hibernate 中围绕复合键的许多问题。我现在面临的问题是,Hibernate 生成的大多数 SQL 语句只使用 ID 列。例如,由 Hibernate 生成的 UPDATE 语句将读作

UPDATE object SET value = ? WHERE ID = ?

但是,由于此查询排除了 TENANT_ID 上的任何谓词,因此它没有充分利用分区,并且需要扫描每个分区,直到找到 ID。我希望生成的查询产生:

UPDATE object SET value = ? WHERE ID = ? AND TENANT_ID = ?

我的问题是,是否有一种简单的方法可以做到这一点,而不必在 JPA 中使用复合键,因为我知道很多人不鼓励使用它们。

【问题讨论】:

  • 你真的需要这两列(TENANT_IDID)吗?难道你不能完全删除ID 列,并将TENANT_ID 定义为主键吗?
  • 选项2:用ID而不是TENANT_ID分区呢?

标签: mysql hibernate jpa partitioning


【解决方案1】:

您可以使用嵌入式实体,例如包含 id 和 EntityId 的 ObjectPK。而不是使用 @EmbeddedId 从 Object 实体中引用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-20
    • 1970-01-01
    • 2011-07-26
    • 2018-05-06
    • 2019-12-10
    • 1970-01-01
    • 2010-10-05
    • 2017-09-04
    相关资源
    最近更新 更多