我们正在尝试在当前项目中实施域驱动设计方法。我们所有定义为值对象的实体主键。因此,我们的主键值对象将如下所示:
@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(没有值对象)吗?