Мы пытаемся реализовать подход, основанный на домене, в нашем текущем проекте. Все первичные ключи нашей сущности мы определили как объект значения. Таким образом, наш объект значения первичного ключа будет выглядеть так:
@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;
}
}
Затем в основном объекте мы отобразили его как внедренный идентификатор.
@Entity
@Table(name = "machinery")
public class Machinery implements Serializable {
@EmbeddedId private MachineryId id;
}
При вышеуказанном подходе мы сталкиваемся с проблемами в JPA / Hibernate при использовании Postgres DB.
Сохранение нового объекта выдает ошибку для нулевого идентификатора. Это обрабатывается JPA, когда мы используем Long id для первичного ключа. Проблема возникает, когда мы используем объект значения для идентификатора.
Есть идеи, как это сделать? Необходимо сопоставить внедренный объект значения (не составной ключ) в качестве первичного ключа.
Кроме того, можем ли мы хранить идентификатор как Long (без объекта-значения) при работе с DDD?