Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring数据唯一约束_Java_Spring_Spring Data Gemfire - Fatal编程技术网

Java Spring数据唯一约束

Java Spring数据唯一约束,java,spring,spring-data-gemfire,Java,Spring,Spring Data Gemfire,我正在使用Spring Data GemFire并使用它,如下所示: 存储库: @Region("Token") public interface TokenRepository extends GemfireRepository<Token, String> {} public class Token implements Serializable { @Id private UUID id; private String serial; 是否可以像JPAs@Column(

我正在使用Spring Data GemFire并使用它,如下所示:

存储库:

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

@Id
private UUID id;
private String serial;


是否可以像JPAs
@Column(unique=true)
那样,在
串行
属性上强制唯一性?充其量,它应该在保存时抛出一个
异常

快速而简单的答案是否定的。Spring数据GemFire和Pivotal GemFire(本身)都不支持对存储在区域中的对象强制执行唯一属性的能力

即使在使用JPA(例如Hibernate)时,
@Column(unique=true)
也被实现为RDMBS表列(university)约束,因此JPA没有特别做什么来强制唯一性。如果RDBMS表中不存在此列约束,则
列(unique=true)
将产生效果

这意味着需要在数据存储中强制执行唯一性,这对于Pivotal GemFire尤其如此,因为

Pivotal GemFire是一个键/值存储,其中值是您的(整个)对象,存储在特定区域的对象将在GemFire集群中分布和复制(用于HA场景中的冗余),这不仅使强制执行唯一性非常困难,而且非常昂贵(例如,检查耗时)

当然还有其他方法来处理这个问题,比如为每个唯一的列/属性保留一个内存中的值哈希数据结构。但是,这会给内存带来压力,您还需要保持数据结构的最新状态。此外,根据使用的哈希算法,它们并不总是严格唯一的


所以,这里真的没有一个好的答案。

您能告诉我们更多关于为什么您希望序列号是唯一的吗?你有没有想过用Id和序列号组合你的Id?这只是一个小例子,我知道我可以简单地使用序列号作为Id。但是我会有多个属性,它们本身需要是唯一的,所以组合的Id不起作用。