Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 休眠在多对多列表上创建别名_Java_Hibernate_Db2_Hibernate Annotations_Hibernate Criteria - Fatal编程技术网

Java 休眠在多对多列表上创建别名

Java 休眠在多对多列表上创建别名,java,hibernate,db2,hibernate-annotations,hibernate-criteria,Java,Hibernate,Db2,Hibernate Annotations,Hibernate Criteria,我有四节课;UserGroup、UserAccount、Role、UserGroupRoRelation和my db是IBM DB2 @Entity @Table(name = "USER_GROUP") public class UserGroup implements Serializable { @Id @Column(name = "USER_GROUP_ID") @GeneratedValue private Long id; ...... ..

我有四节课;UserGroup、UserAccount、Role、UserGroupRoRelation和my db是IBM DB2

@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>();
}
@实体
@表(name=“USER\u GROUP”)
公共类UserGroup实现了可序列化{
@身份证
@列(name=“USER\u GROUP\u ID”)
@生成值
私人长id;
......
..
@OneToMany(mappedBy=“userGroup”,cascade=CascadeType.ALL,orphan=true)
private List userAccountsRole=new ArrayList();
}
@实体
@表(name=“ROLE”)
公共类角色实现可序列化{
@身份证
@列(name=“ROLE\u ID”)
@生成值
私人长id;
......
@OneToMany(mappedBy=“角色”)
private List useraccountinggroup=new ArrayList();
}
@实体
@表(name=“USER\u GROUP\u ROLE\u LINE”,uniqueConstraints=@UniqueConstraint(columnNames={“ROLE\u ID”,“USER\u GROUP\u ID”}))
公共类UserGroupRoleRelation{
@身份证
@生成值
@列(name=“relationship\u ID”)
私人长期关系;
@多个(级联=级联类型.ALL)
@JoinTable(name=“USER\u ACCOUNT\u USER\u GROUP\u ROLE\u LINE”,joinColumns={@JoinColumn(name=“relationshid”)},inverseJoinColumns={@JoinColumn(name=“USER\u ID”)},uniqueConstraints=@UniqueConstraint(columnNames={“USER\u ID”,“relationship\u ID”))
private List userAccountList=new ArrayList();
@许多酮
@JoinColumn(name=“USER\u GROUP\u ID”)
私有用户组用户组;
@许多酮
@JoinColumn(name=“ROLE\u ID”)
私人角色;
}
@实体
@表(name=“用户账户”)
公共类UserAccount实现可序列化{
@身份证
@列(name=“USER\u ID”)
@生成值
私人长id;
.....
@ManyToMany(mappedBy=“userAccountList”,cascade=CascadeType.ALL)
private List rolesInGroup=new ArrayList();
}
我想找到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();

    }
@覆盖
@交易的
公共列表findUserGroupOf(用户帐户用户帐户){
Criteria=getSession().createCriteria(UserGroup.class);
createAlias(“userAccountsRole”、“userAccountsRole”);
添加(Restrictions.eq(“userAccountsRole.userAccountList”,userAccount));
返回条件。list();
}
但当我尝试获取该方法的结果时,DB2给了我
DB2SQL错误:SQLCODE=-313,SQLSTATE=07004,SQLERRMC=null,DRIVER=3.63.75

可能是关于在多对多关系上创建别名。我不知道如何在多对多上创建别名。如何获得该函数的结果


谢谢

这不是创建别名的原因。您正在将一个对象传递给hibernate,它无法对该对象制定任何条件。您需要为此创建双向映射。或者,如果您的需求只是获取特定用户组类的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();

}
@覆盖
@交易的
公共列表findUserGroupOf(长用户组ID){
Criteria=getSession().createCriteria(UserGroup.class);
添加(Restrictions.eq(“id”,userGroupId));
createAlias(“userAccountsRole”、“uar”);
setFetchMode(“uar.userAccountList”,FetchMode.JOIN);
返回条件。list();
}

这不是创建别名的原因。您正在将一个对象传递给hibernate,它无法对该对象制定任何条件。您需要为此创建双向映射。或者,如果您的需求只是获取特定用户组类的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();

}
@覆盖
@交易的
公共列表findUserGroupOf(长用户组ID){
Criteria=getSession().createCriteria(UserGroup.class);
添加(Restrictions.eq(“id”,userGroupId));
createAlias(“userAccountsRole”、“uar”);
setFetchMode(“uar.userAccountList”,FetchMode.JOIN);
返回条件。list();
}
@覆盖
@交易的
公共列表findUserGroupOf(用户帐户用户帐户){
Criteria=getSession().createCriteria(UserGroup.class);
createAlias(“userAccountsRole”、“userAccountsRole”);
createAlias(“userAccountsRole.userAccountList”、“userAccountList”);
添加(Restrictions.eq(“userAccountList.id”,userAccount.getId());
返回条件。list();
}
它对我有用。我指的是关于“身份”的标准。但我不明白为什么当有很多列表时,我不能检查对象的相等性而不是id @交易的 公共列表findUserGroupOf(用户帐户用户帐户){ Criteria=getSession().createCriteria(UserGroup.class); createAlias(“userAccountsRole”、“userAccountsRole”); createAlias(“userAccountsRole.userAccountList”、“userAccountList”); 添加(Restrictions.eq(“userAccountList.id”,userAccount.getId()); 返回条件。list(); }

它对我有用。我指的是关于“身份”的标准。但是我不明白为什么我不能在有很多列表的情况下检查object而不是id的相等性

很抱歉,这就像查找useraccount的usergroup,而不是查找组的useraccount。我将提供一个useraccount,它将找到它的用户组。你能告诉我这是什么样的吗?很抱歉,这就像是在用户帐户中查找用户组,而不是在组中查找用户帐户。我将提供一个useraccount,它将找到它的用户组。你能告诉我它是什么样子吗?