Попытка удаления дубликата записи с помощью Hibernate - PullRequest
0 голосов
/ 09 июня 2011

У меня есть 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
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...