如何更新 Spring CassandraRepository 中的多个表
How to update multiple tables in Spring CassandraRepository
假设我在 cassandra 中有一个名为 'UserPrincipal' 的用户 table,存储库将类似于以下内容
public interface UserRepository extends CassandraRepository<UserPrincipal>
{
@Query("SELECT * FROM UserPrincipal WHERE email = ?0")
UserPrincipal findByEmailAddress(String emailAddress);
}
例如,如果我需要使用用户名查询 table,我必须对 table 进行非规范化并创建一个副本,我们将其称为 UserPrincipalByUsername,它与第一个相同,只是不同使用主键,现在,我可以使用以下接口作为存储库吗? saving/removing 一个用户 to/from 同时 table 两个用户如何保持数据一致性?
public interface UserRepository extends CassandraRepository<UserPrincipal>
{
@Query("SELECT * FROM UserPrincipal WHERE email = ?0")
UserPrincipal findByEmailAddress(String emailAddress);
@Query("SELECT * FROM UserPrincipalByUsername WHERE username= ?0")
UserPrincipal findByUsername(String username);
}
可以注意到,可以使用两个单独的接口来单独处理每个 table,但是,我仍然需要一些逻辑来保持某些点的一致性。
我正在使用 Cassandra 2.0.11、CQL 规范 3.1.1、Spring data Cassandra 1.3.2 和 Spring boot 1.3.1
我发现解决这个问题的唯一程序是,如问题中所述,使用两个单独的接口单独处理每个 table,我添加了一个包装器 class 来同时使用这两个接口其中 save
使用一次调用,但这并不能保证始终保持一致性(例如,在 server/system 失败的情况下),但这在我的特定应用程序中是可以的。
假设我在 cassandra 中有一个名为 'UserPrincipal' 的用户 table,存储库将类似于以下内容
public interface UserRepository extends CassandraRepository<UserPrincipal>
{
@Query("SELECT * FROM UserPrincipal WHERE email = ?0")
UserPrincipal findByEmailAddress(String emailAddress);
}
例如,如果我需要使用用户名查询 table,我必须对 table 进行非规范化并创建一个副本,我们将其称为 UserPrincipalByUsername,它与第一个相同,只是不同使用主键,现在,我可以使用以下接口作为存储库吗? saving/removing 一个用户 to/from 同时 table 两个用户如何保持数据一致性?
public interface UserRepository extends CassandraRepository<UserPrincipal>
{
@Query("SELECT * FROM UserPrincipal WHERE email = ?0")
UserPrincipal findByEmailAddress(String emailAddress);
@Query("SELECT * FROM UserPrincipalByUsername WHERE username= ?0")
UserPrincipal findByUsername(String username);
}
可以注意到,可以使用两个单独的接口来单独处理每个 table,但是,我仍然需要一些逻辑来保持某些点的一致性。
我正在使用 Cassandra 2.0.11、CQL 规范 3.1.1、Spring data Cassandra 1.3.2 和 Spring boot 1.3.1
我发现解决这个问题的唯一程序是,如问题中所述,使用两个单独的接口单独处理每个 table,我添加了一个包装器 class 来同时使用这两个接口其中 save
使用一次调用,但这并不能保证始终保持一致性(例如,在 server/system 失败的情况下),但这在我的特定应用程序中是可以的。