DDD值对象作为Postgresql的主键

时间:2018-09-03 06:51:35

标签: hibernate jpa spring-data-jpa domain-driven-design hibernate-mapping

我们正在尝试在当前项目中实施域驱动设计方法。我们所有定义为值对象的实体主键。因此,我们的主键值对象将如下所示:

@Value
@Embeddable
public @Data class MachineryId implements ValueObject<Long> {
    @GenericGenerator(name = "kaugen", strategy = "increment")
    @GeneratedValue(generator = "kaugen")
    private final Long id;

    @Override
    public Long value() {
        return this.id;
    }
}

然后在主要实体中,我们已将其映射为嵌入式ID。

@Entity
@Table(name = "machinery")
public class Machinery implements Serializable {
    @EmbeddedId private MachineryId id;

}

使用上述方法,我们使用Postgres DB遇到JPA / Hibernate问题。 保存新对象会引发错误的空ID。当我们使用Long id作为主键时,这由JPA处理。当我们使用值对象作为ID时会发生问题。

任何想法该怎么做?需要将嵌入式值对象(而不是组合键)映射为主键。

加上使用DDD时,我们可以将id保持为Long(没有值对象)吗?

0 个答案:

没有答案