我有一个名为“UserRoleHolder”的模型,如下所示。
@Entity
public class UserRoleHolder extends Model implements RoleHolder {
private static final long serialVersionUID = 1L;
@EmbeddedId
public UserRoleHolderPK userRoleHolderPK;
public List<UserPermission> permissions;
public List<UserRole> roles;
....
我制作了一个名为 UserRoleHolderPK 的复合 PK,它包含两个外键,如下所示。
@Embeddable
public class UserRoleHolderPK {
@Basic
public Long userId;
@Basic
public Long projectId;
public UserRoleHolderPK(Long userId, Long projectId) {
this.userId = userId;
this.projectId = projectId;
}
public boolean equals(Object object) {
if (object instanceof UserRoleHolderPK) {
UserRoleHolderPK userRoleHolderPK = (UserRoleHolderPK) object;
return userId == userRoleHolderPK.userId && projectId == userRoleHolderPK.projectId;
} else {
return false;
}
}
public int hashCode() {
return (int) (userId + projectId);
}
}
userId 和 projectId 来自其他模型。(User.java 和 Project.java)然后,在“UserRoleHolder”类中,我创建了一个名为“findRolesById”的方法,如下所示。
public static List<? extends Role> findRolesById(Long userId, Long projectId) {
return find
.where()
.eq("userRoleHolderPK", new UserRoleHolderPK(userId, projectId))
.findUnique().roles;
}
但是,当我尝试运行如下所示的测试代码时,遇到了严重错误。
@Test
public void findRolesById() {
// Given
// When
@SuppressWarnings("unchecked")
List<UserRole> list = (List<UserRole>) UserRoleHolder.findRolesById(1l, 1l);
// Then
assertThat(list.get(0).name).isEqualTo("manager");
}
错误就像,
'SQL 语句中的语法错误 "SELECT T0.USER_ID C0, T0.PROJECT_ID C1 FROM USER_ROLE_HOLDER T0 WHERE T0.NULL[*] = ?"; 预期的“标识符”;SQL语句:select t0.user_id c0, t0.project_id c1 from user_role_holder t0 where t0.null = ? [42001-158] 绑定值:[null] 查询是:select t0.user_id c0, t0.project_id c1 from user_role_holder t0 where t0.null = ?
我想我在使用 JPA 时错过了一些严肃和基本的东西。请让我知道是什么问题。