Двунаправленный @OneToOne не работает при сохранении ребенка без родителя - PullRequest
0 голосов
/ 26 мая 2018

У меня такая ситуация:

Родительская сущность:

@Entity
public class Address {

  @OneToOne( optional = false, targetEntity = User.class, fetch = FetchType.LAZY, orphanRemoval = true )
  @JoinColumn( name = "id_user", referencedColumnName = "id" )
  private User user;

}

Дочерняя сущность:

@Entity
public class User {

   @OneToOne( optional = false, targetEntity = Address.class, mappedBy = "user", fetch = FetchType.LAZY, orphanRemoval = true )
   private Address address;
}

Как видите, в каскадной операции нетобе стороны.Но когда я сохраняю пользователя:

userRepository.save( new User() ); 

Выдает это исключение:

org.springframework.dao.DataIntegrityViolationException: not-null property references a null or transient value : org.company.models.User.address; nested exception is org.hibernate.PropertyValueException: not-null property references a null or transient value : org.company.models.User.address
.............
Caused by: org.hibernate.PropertyValueException: not-null property references a null or transient value : org.company.models.User.address

Я хочу сохранить только дочерний элемент, это должно быть возможно, так как @JoinColumn находится вродитель, поэтому мне не нужно устанавливать его перед сохранением.
Может кто-нибудь прояснить мне эту проблему?Большое спасибо

1 Ответ

0 голосов
/ 26 мая 2018

Проблема связана с тем, что ваши отношения между User и Address помечены как optional=false, что означает, что они не могут быть нулевыми.

Таким образом, вам нужно либо использовать optional=true и разрешить нулевые значения, либо заполнить отношение Address в вашем User, прежде чем вы сохраните его.

...