我正在用cassandradb开发一个简单的spring-boot微服务。
中我的服务器中的主实体 Subscription
以下类别:
public final class Subscription {
private String id;
private String firstUser;
private String secondUser;
private String firstUserStatus;
private String secondUserStatus;
}
我的存储库使用订阅对象并将其持久化。但在坚持之前,我应该检查一些约束条件,主要是不能有另一个具有相同约束条件的订阅 firstUser
以及 secondUser
. 它可能失败的情况非常简单:
将保留一个订阅
正在验证表是否存在具有相同用户的另一个订阅
现在可以保留另一个具有相同用户的订阅,并使以前的验证失效
正在保留订阅。
正确的解决方法是什么?
值得一提的是:用户的顺序并不重要。如果要保留与用户“1”和“2”的订阅,则必须不存在与用户“1”和“2”或“2”和“1”的其他订阅。
upd:考虑到@bhspencer的答案,我可以提出另一个案例(我还需要强制状态保持一致):
一个订阅将与 firstUserStatus="ISSUED"
以及 secondUserStatus="WAITING_ACTION"
正在验证表是否存在具有相同用户的另一个订阅
具有相同id(用户)和 firstUserStatus="WAITING_ACTION"
以及 secondUserStatus="ISSUED"
现在可以保留并使以前的验证过时
正在保留初始订阅并覆盖已存在的订阅-> secondUserStatus="ISSUED"
是迷路了
1条答案
按热度按时间xxb16uws1#
将对象的id设置为firstuser+seconduser的串联。使id成为确保订阅唯一的主键。
由于您的排序要求,您应该首先对第一个用户和第二个用户进行排序,然后按排序顺序将它们连接起来。这样做意味着generateid(“1”、“2”)和generateid(“2”)1“)将生成相同的id“1-2”。