У меня есть 3 простые таблицы
Полномочия - Полномочия (varchar) -pk
Пользователи - Имя пользователя (varchar) PK, Пароль
Полномочия - Имя пользователя (FK), Полномочия (FK).(Обратите внимание, что полномочия и полномочия.)
Моя проблема заключается в том, что, когда я пытаюсь вставить Дублирующую запись в таблицу Полномочия , эта запись удаляется (я вижу запрос на удаление, созданный hibernate).Но строка в родительской таблице ( USERS ) не изменяется.
Вот Hibernate-Queries, когда вставляется свежая запись (в органах). Скажите значение XYZ , журнал выглядит следующим образом.
Hibernate: вставить в значения USERS (PASSWORD, ENABLED, USERNAME) (?,?,?)
Hibernate: вставить в значения AUTHORITIES (USERNAME, AUTHORITY) (?,?)
Теперь, если я попытаюсь снова вставить ту же запись .. Вот что я получаю
Hibernate: удалить из органов, где USERNAME =?
@Entity
@Table(name="AUTHORITIES")
public class AuthoritiesValue {
@EmbeddedId
private AuthoritiesValuePk id;
@ManyToOne(fetch = FetchType.LAZY,targetEntity = UserValue.class)
@Cascade({CascadeType.SAVE_UPDATE})
@JoinColumn(name="USERNAME",insertable = false, updatable = false)
private UserValue userValue;
//getters-setters
И UserValue Entity
@Entity
@Table(name = "USERS")
public class UserValue {
@Id
@Column(name = "USERNAME")
private String username;
@Column(name = "PASSWORD")
private String password;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name="authorities",
joinColumns = @JoinColumn(name = "USERNAME", referencedColumnName = "USERNAME"),
inverseJoinColumns = @JoinColumn(name = "AUTHORITY", referencedColumnName = "AUTHORITY"))
@NotFound(action = NotFoundAction.IGNORE)
private List<RoleValue> roles;
public List<RoleValue> getRoles() {
return roles;
}
public void setRoles(List<RoleValue> roles) {
this.roles = roles;
}
public String toString() {
//implementation
}
@Override
public int hashCode() {
//implementation
}
@Override
public boolean equals(Object obj) {
//implementation
}
}
Что я делаю не так (возможно, в каскаде)?Я использую Cascade и CascadeType - это импорт Hibernate, а не JPA-сохранение.
Также обратите внимание, что объект USERVALUE уже был кем-то написан ранее.Смотрите отображение @ManyToMany там.Я не уверен, как это работает.Объединение определено для таблицы Полномочия , но (уже записано) RoleValue сущность определена для таблицы Полномочия (не то же самое, что Полномочия)
@Entity
@Table(name = "authority")
public class RoleValue {
@Id
@Column(name = "authority")
private String rolename;
@ManyToMany(fetch = FetchType.LAZY, mappedBy = "roles")
@NotFound(action = NotFoundAction.IGNORE)
private List<UserValue> users;
public RoleValue() {}
//SETTERS-GETTERS here.
@Override
public int hashCode() {
//implemented
}
@Override
public boolean equals(Object obj) {
//implemented
}
}