我是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]
感谢。