我正在使用spring-data-cassandra . 有没有一种方法或注释可以在我的实体java POJO中用于uuid或timeuuid类型的主键,以自动生成主键(id)的值?
我知道我可以使用 id = UUIDs.timeBased(); ,但我希望自动化它 .
id = UUIDs.timeBased();
虽然, id 可以在默认构造函数中初始化 . 但是,它会导致不必要的 UUIDs 生成 .
id
UUIDs
一种更好的方法是利用POJO类的多个构造函数 -
Default constructor -
public MyEntity() { }
Parametrized constructor - 在构造函数中传递除 id 字段之外的所有字段 . 应在应用程序代码中调用此构造函数 . 输入和否 . 田地可以变化 -
public MyEntity(String field1) { this.field1 = field1; this.id = UUIDs.timeBased(); }
使用此方法的一个主要好处是 Spring 使用默认构造函数将 CQL 与POJO类映射,例如在 SELECT 查询响应中 .
Spring
CQL
SELECT
因此,通过这种方式, Spring framework 可以避免不必要的生成 UUID ,并且可以进行一些优化 .
Spring framework
UUID
您始终可以实现默认构造函数:
MyEntity() { id = UUIDs.timeBased(); }
那就够了吗?这显然需要在实例化时不必要的生成,这将消耗系统上的一些随机熵 . 但是,如果您的系统没有运行太高的压力,那么您应该是安全的 .
2 回答
虽然,
id
可以在默认构造函数中初始化 . 但是,它会导致不必要的UUIDs
生成 .一种更好的方法是利用POJO类的多个构造函数 -
Default constructor -
Parametrized constructor - 在构造函数中传递除
id
字段之外的所有字段 . 应在应用程序代码中调用此构造函数 . 输入和否 . 田地可以变化 -使用此方法的一个主要好处是
Spring
使用默认构造函数将CQL
与POJO类映射,例如在SELECT
查询响应中 .因此,通过这种方式,
Spring framework
可以避免不必要的生成UUID
,并且可以进行一些优化 .您始终可以实现默认构造函数:
那就够了吗?这显然需要在实例化时不必要的生成,这将消耗系统上的一些随机熵 . 但是,如果您的系统没有运行太高的压力,那么您应该是安全的 .