У меня есть 2 сущностей (я удалил ненужные поля):Spring JPA сохранить уже существующий Субъект @OneToMany отношений
@Entity
public class ApkPermissions {
@Id
@GeneratedValue
@JsonIgnore
private Long id;
@OneToMany
@Cascade({CascadeType.SAVE_UPDATE})
private Collection<Permission> declaredPermissions;
}
и
@Entity
public class Permission {
@Id
@GeneratedValue
@JsonIgnore
private Long id;
@Column(unique = true)
private String permissionName;
}
когда я сохраняю объект ApkPermissions впервые через CrudRepository у меня нет проблем, но когда я сохраняю другие ApkPermissions с некоторым разрешением, которое уже существует в таблице Permission, возникает исключение, указывающее на нарушение уникального ключа разрешенияName.
Я нашел это решение:
http://www.mkyong.com/hibernate/cascade-jpa-hibernate-annotation-common-mistake/
, что, кажется, подходит мой случай (и моя текущая реализация), но она не работает.
я получаю следующее сообщение об ошибке:
could not execute statement; SQL [n/a]; constraint [UK_l3pmqryh8vgle52647itattb9]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement",
С MySQL:
UNIQUE KEY `UK_l3pmqryh8vgle52647itattb9` (`permission_name`)
Временное решение retrive все соответствующее разрешение на поиск по permissionName из Repository. Тогда сохранение работает нормально. Это логично правильно, но я надеюсь, что существует более простая процедура ...
Не могли бы вы включить вывод сообщения об исключении? –
Я сделал это. Обратите внимание, что теперь я изменил отношения, поскольку @Pardeep предложил –