Странное поведение Hibernate One-to-One и Many-to-One после сохранения сущностей - PullRequest
0 голосов
/ 03 июля 2018

Я использую 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», которое также имеет отношение «многие к одному». Когда я сохраняю записи этого класса, у меня это в таблицах:

Орг Таблица:

enter image description here

OrgDef таблица: enter image description here

Вы можете видеть, что в таблице OrgDef поле org_id равно нулю, но parent_id не равно нулю. Но при сохранении я указываю Org объект для обоих полей org и parent в OrgDef объекте. Может быть проблема в картографировании? Может кто-нибудь помочь? Потому что родительское поле OrgDef сохраняется нормально, но org поле в OrgDef не сохраняется! Я ожидаю, что и org_id и parent_id будут отличны от нуля

1 Ответ

0 голосов
/ 03 июля 2018

Я нашел проблему, я использую эту аннотацию в поле org класса OrgDef:

@JoinColumn(foreignKey = @ForeignKey(name = "fk_orgDef_orgId_org"), updatable = false)

Я указываю, что это поле не может быть обновлено, поэтому hibernate не может вставить значение в это поле. Я удалил updatable = false из этой аннотации и теперь все работает отлично!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...