2017-11-15 16 views
0

私は春データGemFireのと協力し、このようにそれを使用しています:春データGemFireのユニーク制約

リポジトリ:

@Region("Token") 
public interface TokenRepository extends GemfireRepository<Token, String> {} 

エンティティ:

public class Token implements Serializable { 

@Id 
private UUID id; 
private String serial; 

JPA @Column(unique=true)のように、serialプロパティで一意性を強制できますか?せいぜい、保存時にはExceptionが投げられるはずです。

+0

なぜシリアルをユニークにしたいのですか? IDとシリアルであなたのIDを構成することを考えましたか? –

+0

これはほんの少しの例であり、私は単純にIDをシリアルとして使用できることを知っています。しかし、私は自分自身で一意である必要がある複数のプロパティを持つので、合成されたIDは機能しません。 – Domo

答えて

1

素早く簡単な回答はNOです。 Spring Data GemFireも、Pivo​​tal GemFire(それ自体)も、Regionに格納されたオブジェクトに固有のプロパティを適用する機能をサポートしていません。

@Column(unique = true)はJPA(例:Hibernate)を使用する場合でも、RDMBSテーブルの列(一意性)制約として実装されているため、特にJPAが一意性を強制することはありません。この列制約がRDBMSテーブルに存在しない場合、Column(unique = true)で、という効果はありません。

hereを参照してください。

これは...

ピボタルGemFireの値は、あなたの(全体でキー/値ストアですので、一意性は、ピボタルGemFireのために特にそうだろうこれは、データストアで適用する必要があることを意味し)オブジェクトと特定のRegionに格納されているオブジェクトは、GemFireクラスタ全体で分散され、複製されます(HAシナリオでの冗長性のために)、一意性の強制は非常に困難になるだけでなく、非常に高価なものになります。

もちろん、固有の列/プロパティのそれぞれに値ハッシュのメモリ内データ構造を保持するなど、これを処理する他の方法もあります。しかし、それはメモリを圧迫し、データ構造を最新の状態に保つ必要があります。また、使用されるハッシュアルゴリズムによっては、必ずしも厳密に一意であるとは限りません。

ここには本当に良い答えはありません。

関連する問題