Спасение спящего режима в Spring не работает с postgreSQL

58
8

Я UserAccount объект домена Executive который имеет отношения с UserAccount, но при сохранении объекта возникают некоторые ошибки:

WARN : org.hibernate.action.internal.UnresolvedEntityInsertActions - HHH000437: Attempting to save one or more entities that have a non-nullable association with an unsaved transient entity. The unsaved transient entity must be saved in an operation prior to saving these dependent entities.
Unsaved transient entity: ([com.sar.customerplus.entity.UserAccount#0])
Dependent entities: ([[com.sar.customerplus.entity.MarketingExecutive#300]])
Non-nullable association(s): ([com.sar.customerplus.entity.MarketingExecutive.userAccount])
org.springframework.dao.InvalidDataAccessApiUsageException: Not-null property references a transient value - transient instance must be saved before current operation : com.sar.customerplus.entity.MarketingExecutive.userAccount -> com.sar.customerplus.entity.UserAccount; nested exception is org.hibernate.TransientPropertyValueException: Not-null property references a transient value - transient instance must be saved before current operation : com.sar.customerplus.entity.MarketingExecutive.userAccount -> com.sar.customerplus.entity.UserAccount

Должностное лицо

@Column(name = "name", nullable = false)
@ManyToOne
@JoinColumn(name = "user_account_id", nullable = false)
private UserAccount userAccount;

Учетная запись пользователя

@ManyToMany(fetch = FetchType.EAGER,cascade=CascadeType.ALL)
@JoinTable(name = "user_role", joinColumns = { @JoinColumn(name = "useraccount_id") }, inverseJoinColumns = {
@JoinColumn(name = "role_id") })
private List<Role> roles;

Роль

@Id
@SequenceGenerator(name = "seq_role_gen", sequenceName = "seq_role")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_role_gen")
@Column(name = "id", nullable = false, length = 11)
private Long roleId;

@Column(name = "role_name", nullable = false, length = 20)
private String roleName;

И я использовал административный домен, используя:

 UserAccount account=new UserAccount();
account.setUserName(userName);
account.setPassword(password);
Role role=roleService.findRoleByRoleName("ROLE_EXECUTIVE");
List<Role>roles=new ArrayList<>();
roles.add(role);
account.setRoles(roles);

MarketingExecutive executive=new MarketingExecutive();
executive.setName(name);
executive.setUserAccount(account);
marketingExecutiveService.saveMarketingExecutive(executive);

спросил(а) 2016-01-20T20:25:00+03:00 3 года, 10 месяцев назад
1
Решение
79

переходный экземпляр должен быть сохранен до текущей операции

Это означает, что вы сохраняете экземпляр Executive который имеет отношения с transient экземпляром UserAccount, экземпляром UserAccount который еще не сохранился.

Вы либо должны сохраняться вашим вновь инстанцированным (transient) UserAccount перед тем сохраняющиеся Executive:

UserAccount account = new UserAccount();
...
accountRepository.save(account);
...
executive.setUserAccount(account);
marketingExecutiveService.saveMarketingExecutive(executive);

или добавить подходящий вариант Cascade для вашего Executive органа:

// other annotations
@ManyToOne(cascade = CascadeType.PERSIST)
private UserAccount userAccount;

ответил(а) 2016-01-20T20:29:00+03:00 3 года, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема