领域对象的ID生成策略有三种比较常用,其中一种直接依赖数据库实现。
每次SnackMachine创建时,系统会从数据库中查询ID赋值给实体。这种方式有局限,且只能生成整形ID。依赖数据这种方式还不利于单元测试,所以这种方式不推荐。另一种方式是使用UUID:
public abstract class Entity{
private UUID id;
private Entity() {
id= UUID.randomUUID();
}
public UUID getId(){
return id;
}
}
1BA876A6-2D12-3CB3-CFF3-7A82A57B0863,此种方式没有上面所说的那些缺点,但略显笨重,且不能用整形表示。折中的方式是使用Hi/Lo
算法,它的实现是TableHiloGenerator
。在这里,我们使用JPA的@GeneratedValue
注解生成UUID。