У меня проблемы с сохранением объектов с репозиториями jpa. У меня два объекта. Один к одному, связанные:Ребенок не вставлен
@Entity(name="USER")
public class User {
@Id
@GeneratedValue
@Column(name = "USER_ID")
private Long userId;
private String username;
@OneToOne(mappedBy = "user", cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn
@LazyCollection(LazyCollectionOption.FALSE)
private Wallet wallet;
и бумажнику
@Entity(name = "WALLET")
public class Wallet implements Serializable {
@Id
@GeneratedValue
@Column(name = "WALLET_ID")
private Long id;
@OneToMany(mappedBy = "wallet")
@Cascade({org.hibernate.annotations.CascadeType.ALL})
@LazyCollection(LazyCollectionOption.FALSE)
private List<Paper> papers;
@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn
private User user;
У меня есть проблема с этой ситуацией - спящий режим не спасает бумажник, когда я добавляю новый пользователь:
public String addUser(@PathVariable("userName") String userName) {
UserDto userDto = new UserDto();
userDto.setUsername(userName);
WalletDto walletDto = new WalletDto();
userDto.setWalletDto(walletDto);
userService.addUser(userDto);
return userDto.toString();
}
и addUser:
@Override
@Transactional
public void addUser(UserDto userDto) {
userRepository.save(userConverter.convertToEntity(userDto));
}
где save - это метод jpa.
EDIT:
public void addUser(UserDto userDto) {
User user = userConverter.convertToEntity(userDto);
Wallet wallet = walletConverter.convertToEntity(userDto.getWallet());
user.setWallet(wallet);
userRepository.save(user);
}
и действительно странная вещь:
12:30:06,619 DEBUG EntityPrinter:121 - com.private.model.Wallet{id=6, papers=null, user=com.private.model.User#7}
12:30:06,619 DEBUG EntityPrinter:121 - com.private.model.User{username=xyzasew, userId=7, wallet=com.private.model.Wallet#6}
и в Wallet таблице нет пользователей след =)
Edit. Почти там я надеюсь =):
Я хочу, чтобы бумажник, чтобы быть хозяином пользователя и бумаги, в соответствии с Вашими советами я eddited НЕМНОГО сущности:
@Entity(name = "WALLET")
public class Wallet implements Serializable {
@Id
@GeneratedValue
@Column(name = "WALLET_ID")
private Long id;
@OneToMany(mappedBy = "wallet", cascade = CascadeType.ALL)
@LazyCollection(LazyCollectionOption.FALSE)
private List<Paper> papers;
@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "wallet")
private User user;
и пользователь:
@Entity(name="USER")
public class User {
@Id
@GeneratedValue
@Column(name = "USER_ID")
private Long userId;
private String username;
@OneToOne(cascade = CascadeType.ALL)
private Wallet wallet;
однако у кошелька все еще нет user_id, и пользователь получил его!
В вашем 'userConverter' - вы устанавливаете обе части ассоциации? I.E. вы устанавливаете 'wallet.user' свой экземпляр' user'? – bedrin
ну - нет, но как я могу установить кошелек, где нет идентификатора [поскольку еще не сохранен]? – iie
просто установите ссылку. В вашем карточном кошельке является владельцем ассоциации, а не используется. Или переместите mappedBy из пользователя в кошелек – bedrin