spring-projects / spring-projects/spring-data-cassandra
Refactor primary key annotations [DATACASS-361]
Open
@mp911de is already working on this.
Since Dec 31, 2020.
in: mapping
type: task
- Dominant language
- Java
- Stars
- 400
- Forks
- 318
- PR merge metrics
- No merged PRs in 30d
Description
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
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.