querydsl sql many-to-many-to-many

时间:2015-01-11 08:42:33

标签: sql querydsl

我是querydsl和sql的初学者,我想在我的代码中使用qbean类实现多对多关系。 这是我的QBean类:

final QBean<SecurableItemType> securableItemTypeBean = bean(SecurableItemType.class, securableItemType.all());
final QBean<SecurableItem> securableItemBean = bean(SecurableItem.class,
        securableItem.securableItemId,
        securableItem.name
        , securableItem.uniqueId, securableItem.position, securableItem.enabled
);

final QBean<RoleSecurableItem> roleSecurableItemBean = bean(RoleSecurableItem.class
        ,securableItemBean.as("securableItem")
);

final QBean<Role> roleBean = bean(Role.class, role.roleId, role.name
        , role.enabled, role.uniqueId, role.description
        , list(roleSecurableItemBean).as("roleSecurableItems")
);

final QBean<UserRole> userRoleBean = bean(UserRole.class
        , roleBean.as("role")
);



final QBean<AppUser> appUserBean = bean(AppUser.class, appUser.userId, appUser.personalCode
        , appUser.firstName, appUser.lastName, appUser.username, appUser.password, appUser.enabled
        , appUser.picture, appUser.organId, appUser.description, appUser.loginTry, appUser.userLocked
        , list(userRoleBean).as("roles")

);

这是我的查询

return queryFactory
            .from(appUser)
            .fullJoin(appUser._fkuserRole472634, userRole)
            .fullJoin(userRole.fkuserRole820825, role)
            .fullJoin(role._fkroleSecur628757, roleSecurableItem)
            .fullJoin(roleSecurableItem.fkroleSecur233998, securableItem)
            .fullJoin(appUser._fkuserIpAd409749, userIpAddress)
            .fullJoin(userIpAddress.fkuserIpAd387468, ipAddress)
            .fullJoin(ipAddress.fkipAddress105451, ipType)
            .where(where)
            .transform(
                    GroupBy.groupBy(appUser.userId)
                            .list(appUserBean)
            )
            ;

但是当我执行代码时会发生此错误:

java.lang.IllegalArgumentException: argument type mismatch
! at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_20-ea]
! at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_20-ea]
! at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_20-ea]
! at java.lang.reflect.Method.invoke(Method.java:483) ~[na:1.8.0_20-ea]
! at com.mysema.query.types.QBean.newInstance(QBean.java:268) ~[querydsl-core-3.5.1.jar:na]
! at com.mysema.query.types.FactoryExpressionUtils.compress(FactoryExpressionUtils.java:155) ~[querydsl-core-3.5.1.jar:na]
! at com.mysema.query.types.FactoryExpressionUtils.compress(FactoryExpressionUtils.java:154) ~[querydsl-core-3.5.1.jar:na]
! at com.mysema.query.types.FactoryExpressionUtils.access$100(FactoryExpressionUtils.java:28) ~[querydsl-core-3.5.1.jar:na]
! at com.mysema.query.types.FactoryExpressionUtils$FactoryExpressionAdapter.newInstance(FactoryExpressionUtils.java:58) ~[querydsl-core-3.5.1.jar:na]
! at com.mysema.query.group.AbstractGroupByTransformer$FactoryExpressionAdapter.newInstance(AbstractGroupByTransformer.java:61) ~[querydsl-core-3.5.1.jar:na]
! at com.mysema.query.types.FactoryExpressionUtils$FactoryExpressionAdapter.newInstance(FactoryExpressionUtils.java:58) ~[querydsl-core-3.5.1.jar:na]
! at com.mysema.query.sql.AbstractSQLQuery.newInstance(AbstractSQLQuery.java:420) ~[querydsl-sql-3.5.1.jar:na]
! at com.mysema.query.sql.AbstractSQLQuery.access$000(AbstractSQLQuery.java:42) ~[querydsl-sql-3.5.1.jar:na]
! at com.mysema.query.sql.AbstractSQLQuery$3.produceNext(AbstractSQLQuery.java:251) ~[querydsl-sql-3.5.1.jar:na]
! at com.mysema.query.sql.SQLResultIterator.next(SQLResultIterator.java:85) ~[querydsl-sql-3.5.1.jar:na]

感谢。

0 个答案:

没有答案