spring-data-cassandra
spring-data-cassandra copied to clipboard
Refactor primary key annotations [DATACASS-361]
Mark Paluch opened DATACASS-361 and commented
Today's @PrimaryKey, @Id and @PrimaryKeyColumn lead to ambiguity which types to use.
-
@Id: applied on field/property level to mark the primary key/identified -
@PrimaryKey: similar to@Idbut with column name property -
@PrimaryKeyColumn: column name, ordering and primary key type properties
A typical compound key entity looks like:
@PrimaryKeyClass
class PersonKey {
@PrimaryKeyColumn(name="first_name", type=PARTITIONED, ordinal = 1) String firstname;
@PrimaryKeyColumn(type=CLUSTERED, ordinal = 2) String lastname;
}
@Table
class Person {
@PrimaryKey PersonKey key;
@Column("fieldname") String fieldname;
}
or
@Table
class Person {
@Id PersonKey key;
@Column("fieldname") String fieldname;
}
and a simple key entity:
@Table
class Person {
@PrimaryKey String key;
@Column("fieldname") String fieldname;
}
or
@Table
class Person {
@Id String key;
@Column("fieldname") String fieldname;
}
The code raises following questions:
- When to use
@Idand when@PrimaryKey? - Why is it that
@Columncannot be applied to@Idproperties? -
PrimaryKeyColumndeclares properties that can be left empty, depending on the primary key type - Are all annotations required?
Proposal
- Deprecate
@PrimaryKeyColumnin favor of@PartitionKey(value [optional, ordinal])and@ClusteringKey(value [optional, ordinal], ordering)that can be combined with@Column.@PrimaryKeyColumnsupport can remain active and the new annotations can be built as composed annotations - Deprecate
@PrimaryKeyin favor of@Idthat can be combined with@Column.
No further details from DATACASS-361