I use Spring Boot 2.1.x to store a user entity in a Cassandra database. This works.
- java generated uuid
- mail address
- salted bcrypt password
- some user defined types...
In case somebody uses the login I get the mail and the password to get the credentials.
For retrieving the user object I expect some where
clause with select * from user where username = mail
.
However, mail must be the partition key in Cassandra, but I want the user to be able to change their mail address and then it may not be part of the primary key of a Cassandra table.
My naive bad idea is to have an inverse table with a tuple (mail, java generated uuid) to look up the user and then to load the user with the uuid.
@PrimaryKeyColumn(type = PrimaryKeyType.PARTITIONED, ordinal = 0, name = "id")
@JsonProperty("id")
private String id;
@PrimaryKeyColumn(type = PrimaryKeyType.CLUSTERED, ordinal = 1, name = "email")
@Email(message = "*Please provide a valid email")
@NotEmpty(message = "*Please provide an email")
@JsonProperty("email")
private String email;