1

hibernate を 3.5.6 から 4.10 に更新しました。多対多の関係に問題があります。

ユーザー クラス

@Entity
@Table(name="user")
public class User {
    @ManyToMany(fetch=FetchType.LAZY)
    @Cascade(value={CascadeType.PERSIST, CascadeType.MERGE,CascadeType.REFRESH}) 
    @JoinTable(name="usersroles", joinColumns = { @JoinColumn(name ="usersroles_user" )}, inverseJoinColumns = { @JoinColumn(name = "usersroles_role") }) 
    @JSON(serialize=false)
    public Set<Role> getRoles() {
        return roles;
    }
}

役割クラス

@Entity
@Table(name="role")
public class Role {  
    @ManyToMany(cascade {CascadeType.REFRESH},fetch=FetchType.LAZY,mappedBy="roles")
    @JSON(serialize=false)
    public Set<User> getUsers() {
        return users;
    }
}

それはクエリメソッドです:

public List<User> getUserAndRoleList() {
    String jpql = "SELECT DISTINCT u FROM User u , Role r, UserRole ur  WHERE u.id = ur.userId AND r.id = ur.roleId ORDER BY u.username";
    QueryResult<User> qr = super.getDataWithOriginalJPQL(jpql);

    userList = qr.getResultList();
    return userList;
}

Role を取得したい場合:

userList = userService.getUserAndRoleList();
for(int i=0;i<userList.size();i++){
    Iterator<Role> it = userList.get(i).getRoles().iterator();
    Role role ;
}   

これは機能します。しかし、コードが実行されると

userList.get(i).getRoles()

Hibernate 4.1 は、usersroles テーブルのユーザーとロールの関係を自動的に削除します。しかし、Hibernate 3.6.5 では、関係は削除されませんでした。

実際、私は何も削除しませんし、休止状態に何かを削除するように依頼することもありません。わからないことが起こるかもしれません。Hibernate が削除されないようにするにはどうすればよいですか? または、私が間違ったことはありますか?

4

0 に答える 0