【问题标题】:Spring Data GemFire unique constraintSpring Data GemFire 唯一约束
【发布时间】:2017-11-15 13:12:06
【问题描述】:

我正在使用 Spring Data GemFire 并像这样使用它:

存储库:

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

实体:

public class Token implements Serializable {

@Id
private UUID id;
private String serial;

是否可以对 serial 属性强制唯一性,例如 JPA @Column(unique=true)?充其量它应该在保存时抛出一个Exception

【问题讨论】:

  • 你能告诉我们更多像为什么你希望连续剧是独一无二的吗?你有没有想过用 id 和 serial 组合你的 ID?
  • 这只是一个小例子,我知道我可以简单地使用序列号作为 id。但是我将有多个属性需要自己唯一,因此组合 id 将不起作用。

标签: java spring spring-data-gemfire


【解决方案1】:

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

即使在使用 JPA(例如 Hibernate)时,@Column(unique = true) 也被实现为 RDMBS 表列(唯一性)约束,因此 JPA 并没有特别采取任何措施来强制唯一性。如果 RDBMS 表中不存在此列约束,则 Column(unique = true) 将具有no效果。

here

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

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

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

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

【讨论】:

    猜你喜欢
    • 2017-01-04
    • 2017-08-06
    • 1970-01-01
    • 2018-07-25
    • 2016-09-05
    • 2018-03-19
    • 1970-01-01
    • 2018-06-11
    • 1970-01-01
    相关资源
    最近更新 更多