4

(ほとんどの) テーブルが列 TENANT_ID でパーティション分割されている MySQL データベースがあります。各テーブルには、AUTO_INCREMENT を使用する ID フィールドもあるため、すべてのパーティションで一意です。データベースの主キーは、主キーのパーティション列部分を持つという MySQL の要件により、組み合わせ (ID、TENANT_ID) です。

私の 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 の使用を思いとどまらせていることを知っているので、JPA で複合キーに頼らずにこれを行う簡単な方法があるかどうかです。

4

1 に答える 1

0

ID と EntityId を含む ObjectPK などの埋め込みエンティティを使用できます。@EmbeddedId を使用して Object エンティティから参照するよりも。

于 2012-12-12T17:53:05.727 に答える