Я уже спросил о моей ситуации и не нашел правильного решения. После некоторого дополнительного поиска я думаю, что знаю проблему с источником, но не знаю, как ее решить. Как уже упоминалось, у меня есть:
@Table(name = "role__parent")
@IdClass(RoleAssociationKey.class)
@Data
public class RoleAssociation implements Serializable {
@Id
@JoinColumn(name = "has_parent_role_id")
private Role node;
@Id
@JoinColumn(name = "is_parent_for_role_id")
private Role parent;
...
}
@Data
class RoleAssociationKey implements Serializable {
private static final long serialVersionUID = 1L;
private int node;
private int parent;
}
, и у меня есть
@Table(name = "role")
@Data
public class Role implements IRole {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@OneToMany(mappedBy = "node", orphanRemoval = true, cascade = { CascadeType.ALL })
private List<RoleAssociation> parentRoles;
...
До этого момента я не думал ничего особенного. У меня есть запрос:
@NamedQuery(name = "Role.findParents", query =
"SELECT r FROM Role r JOIN RoleAssociation ra ON r.id = ra.parent.id WHERE ra.node.id = :id")
с целью всех установленных родителей. Когда я его компилирую, Hibernate жалуется left and right hand sides of a binary logic operator were incompatible [integer : component[node,parent]]
Поскольку оператор работает в EclipseLink, я понятия не имею, как его преобразовать в рабочий Hibernate. Помощь будет высоко ценится.