1

私は4つのクラスを持っています。 UserGroupに、UserGroupRoleRelationと私のDBは、IBM DB2Hibernateはたくさんのリストにエイリアスを作成します

@Entity 
@Table(name = "USER_GROUP") 
public class UserGroup implements Serializable { 

    @Id 
    @Column(name = "USER_GROUP_ID") 
    @GeneratedValue 
    private Long id; 
...... 
.. 
    @OneToMany(mappedBy = "userGroup", cascade = CascadeType.ALL, orphanRemoval = true) 
    private List<UserGroupRoleRelation> userAccountsRole = new ArrayList<UserGroupRoleRelation>(); 


} 




@Entity 
@Table(name = "ROLE") 
public class Role implements Serializable { 

    @Id 
    @Column(name = "ROLE_ID") 
    @GeneratedValue 
    private Long id; 

    ...... 

    @OneToMany(mappedBy = "role") 
    private List<UserGroupRoleRelation> userAccountInGroup = new ArrayList<UserGroupRoleRelation>(); 


} 


@Entity 
@Table(name = "USER_GROUP_ROLE_LINE", uniqueConstraints = @UniqueConstraint(columnNames = { "ROLE_ID", "USER_GROUP_ID" })) 
public class UserGroupRoleRelation { 

    @Id 
    @GeneratedValue 
    @Column(name = "RELATION_ID") 
    private Long relationId; 

    @ManyToMany(cascade = CascadeType.ALL) 
    @JoinTable(name = "USER_ACCOUNT_USER_GROUP_ROLE_LINE", joinColumns = { @JoinColumn(name = "RELATION_ID") }, inverseJoinColumns = { @JoinColumn(name = "USER_ID") }, uniqueConstraints = @UniqueConstraint(columnNames = { "USER_ID", "RELATION_ID" })) 
    private List<UserAccount> userAccountList = new ArrayList<UserAccount>(); 

    @ManyToOne 
    @JoinColumn(name = "USER_GROUP_ID") 
    private UserGroup userGroup; 

    @ManyToOne 
    @JoinColumn(name = "ROLE_ID") 
    private Role role; 
} 


@Entity 
@Table(name = "USER_ACCOUNT") 
public class UserAccount implements Serializable { 

    @Id 
    @Column(name = "USER_ID") 
    @GeneratedValue 
    private Long id; 
..... 

    @ManyToMany(mappedBy = "userAccountList", cascade = CascadeType.ALL) 
    private List<UserGroupRoleRelation> rolesInGroup = new ArrayList<UserGroupRoleRelation>(); 
} 

あるUserAccountの、役割は、私はUserAccountののユーザグループを見つけたいと私は判断基準と方法を用意しました。そのような;

@Override 
    @Transactional 
    public List<UserGroup> findUserGroupOf(UserAccount userAccount) { 
     Criteria criteria = getSession().createCriteria(UserGroup.class); 
     criteria.createAlias("userAccountsRole", "userAccountsRole"); 
     criteria.add(Restrictions.eq("userAccountsRole.userAccountList", userAccount)); 
     return criteria.list(); 

    } 

しかし、私は、そのメソッドの結果を取得しようとすると、DB2は、多くの関係に多くの上のエイリアスを作成する方法について、そのおそらく私にDB2 SQL Error: SQLCODE=-313, SQLSTATE=07004, SQLERRMC=null, DRIVER=3.63.75

を与えます。私は多くの人にエイリアスを作成するために何をすべきか知っていません。どうすればその機能の結果を得ることができますか?

ありがとう

答えて

4
@Override 
    @Transactional 
    public List<UserGroup> findUserGroupOf(UserAccount userAccount) { 
     Criteria criteria = getSession().createCriteria(UserGroup.class); 
     criteria.createAlias("userAccountsRole", "userAccountsRole"); 
     criteria.createAlias("userAccountsRole.userAccountList", "userAccountList"); 
     criteria.add(Restrictions.eq("userAccountList.id", userAccount.getId())); 
     return criteria.list(); 

    } 

それは私のために動作します。私は "id"の基準を意味します。しかし、私はManyToManyリストがあるときにidの代わりにオブジェクトの平等をチェックできない理由を理解していません

0

エイリアスを作成していません。休止状態にするオブジェクトを渡していて、条件を指定できません。そのための双方向マッピングを作成する必要があります。そうでない場合、特定のUserGroupクラスのUserAccountListのリストを取得するだけであれば、以下のコードに従うことができます。

@Override 
@Transactional 
public List<UserGroup> findUserGroupOf(long userGroupId) { 
    Criteria criteria = getSession().createCriteria(UserGroup.class); 
    criteria.add(Restrictions.eq("id",userGroupId)); 
    criteria.createAlias("userAccountsRole", "uar"); 
    criteria.setFetchMode("uar.userAccountList",FetchMode.JOIN); 
    return criteria.list(); 

} 
+0

私は、ユーザーアカウントのusergroupを見つけて、グループのユーザーアカウントを見つけられなかったのは残念です。私はuseraccountを与え、そのusergroupsを見つけるでしょう。それが何であるかを教えてもらえますか? –

関連する問題