我有一个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中的复合键的情况下执行此操作,因为我知道许多人不鼓励使用它们。
答案 0 :(得分:0)
您可以使用嵌入式实体,例如包含id和EntityId的ObjectPK。而不是使用@EmbeddedId从Object实体引用它。