领域对象的ID生成策略有三种比较常用,其中一种直接依赖数据库实现。
    image.png
    每次SnackMachine创建时,系统会从数据库中查询ID赋值给实体。这种方式有局限,且只能生成整形ID。依赖数据这种方式还不利于单元测试,所以这种方式不推荐。另一种方式是使用UUID:

    1. public abstract class Entity{
    2. private UUID id;
    3. private Entity() {
    4. id= UUID.randomUUID();
    5. }
    6. public UUID getId(){
    7. return id;
    8. }
    9. }

    1BA876A6-2D12-3CB3-CFF3-7A82A57B0863,此种方式没有上面所说的那些缺点,但略显笨重,且不能用整形表示。折中的方式是使用Hi/Lo 算法,它的实现是TableHiloGenerator。在这里,我们使用JPA的@GeneratedValue注解生成UUID。