2012-11-09 42 views
4

我有一个MySQL数据库,其中(大部分)表在列TENANT_ID上进行分区。每个表还有一个使用AUTO_INCREMENT的ID字段,因此在所有分区中都是唯一的。由于MySQL要求主键的分区列部分,数据库主键是一个组合(ID,TENANT_ID)。Hibernate与分区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复合键,因为我知道很多人阻止他们使用。

+0

你真的需要这两列('TENANT_ID'和'ID')吗?难道你不可能完全放弃'ID'列,并将'TENANT_ID'定义为主键? – RandomSeed

+0

选项2:通过'ID'而不是'TENANT_ID'分区怎么办? – RandomSeed

回答

0

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