Я использую Spring Boot с Spring Data, а для сохранения сущностей я использую CrudRepository. У меня есть 2 сущности: Org и OrgDef. Идея состоит в том, чтобы хранить несколько определений для одной организации. Org является неизменной частью, а OrgDef является изменяемой. Вот как это выглядит в коде:
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Getter
@Entity
@Table(name = "org", uniqueConstraints = {
@UniqueConstraint(columnNames = { "code" }, name = "uk_org_code"),
@UniqueConstraint(columnNames = { "definition_id"},
name = "uk_org_definitionId")})
public class Org {
@Id
@Column(
name = "id",
updatable = false,
nullable = false
)
protected UUID id = UUID.randomUUID();
@Column(updatable = false)
protected String code;
@JoinColumn(nullable = false, foreignKey = @ForeignKey(name = "fk_org_definition_orgDef"))
@OneToOne(optional = false, cascade = { CascadeType.PERSIST, CascadeType.MERGE })
protected OrgDef definition;
}
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Getter
@Setter
@Entity
@Table(name = "org_def")
public class OrgDef extends UuidIdEntity {
@Id
@Column(
name = "id",
updatable = false,
nullable = false
)
protected UUID id = UUID.randomUUID();
@JoinColumn(foreignKey = @ForeignKey(name = "fk_orgDef_orgId_org"), updatable = false)
@ManyToOne
protected Org org;
@JoinColumn(foreignKey = @ForeignKey(name = "fk_orgDef_parentId_org"))
@ManyToOne
protected Org parent;
}
Также хочу отметить, что Org имеет отношение один-к-одному к OrgDef, а OrgDef имеет отношение многие-к-одному к Org. Также у OrgDef есть поле «parent», которое также имеет отношение «многие к одному». Когда я сохраняю записи этого класса, у меня это в таблицах:
Орг Таблица:
OrgDef таблица:
Вы можете видеть, что в таблице OrgDef поле org_id равно нулю, но parent_id не равно нулю. Но при сохранении я указываю Org объект для обоих полей org и parent в OrgDef объекте. Может быть проблема в картографировании? Может кто-нибудь помочь? Потому что родительское поле OrgDef сохраняется нормально, но org поле в OrgDef не сохраняется! Я ожидаю, что и org_id и parent_id будут отличны от нуля