У меня есть два объекта с отношением ManyToMany
.HQL Параметр не в атрибуте
Роль Core:
@Entity
@Table(name = "ROLE")
public class RoleCore extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "role_seq_gen")
@SequenceGenerator(name = "role_seq_gen", sequenceName = "ROLE_SEQ", initialValue = 100, allocationSize = 1)
@Column(name = "ROLE_ID", nullable = false)
private Long id;
@Column(name = "NAME", length = 255)
private String name;
@Column(name = "IS_ADMIN")
private Short isAdmin;
@ManyToMany
@JoinTable(inverseJoinColumns = @JoinColumn(name = "FK_RIGHT", referencedColumnName = "RIGHT_ID"),
joinColumns = @JoinColumn(name = "FK_ROLE", referencedColumnName = "ROLE_ID"))
private List<RightCore> rights;
}
Right Core:
@Entity
@Table(name = "RIGHT")
public class RightCore extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "right_seq_gen")
@SequenceGenerator(name = "right_seq_gen", sequenceName = "RIGHT_SEQ", initialValue = 100, allocationSize = 1)
@Column(name = "RIGHT_ID", nullable = false)
private Long id;
@Column(name = "TOKEN", length = 255)
private String token;
@Column(name = "NAME_D", length = 255)
private String nameD;
@Column(name = "NAME_F", length = 255)
private String nameF;
@Column(name = "NAME_I", length = 255)
private String nameI;
@Column(name = "IS_ADMIN")
private Short isAdmin;
@ManyToMany(mappedBy = "rights")
private Collection<RoleCore> roles;
}
Теперь я хочу, чтобы каждый RightCore, что не установлен для одного RoleCore. Для этого я попробовал следующие два заявления и оба бросают java.sql.SQLSyntaxErrorException:"ORA-00936: missing expression"
public interface RightCoreDAO extends JpaRepository<RightCore, Long> {
@Query("select r from RightCore r where :role not in (r.roles)")
List<RightCore> findByRoleNotInAndCategory(
@Param("role") RoleCore role);
@Query("select r from RightCore r where r not in (:rights)")
List<RightCore> findByRightsNotInAndCategory(
@Param("rights") List<RightCore> role);
}
EDIT: Как назвать методы:
@Service
@Transactional
public class AuthorizationDataService {
@Autowired
RightCoreDAO rightCoreDao;
public List<RightCore> loadAvailableRights1(RoleCore role) {
return rightCoreDao.findByRoleNotInAndCategory(role);
}
public List<RightCore> loadAvailableRights2(RoleCore role) {
return rightCoreDao.findByRightsNotInAndCategory(role.getRights());
}
}
Что именно я делаю неправильно и как я могу сделать один из эти заявления работают?
Sarajog
Второй запрос, где сравнение предложений не выглядит правильным, необходимо сравнить на уровне поля. – Rudra
сравнить на уровне поля? не могли бы вы сказать мне, как изменить его так, чтобы он работал? – Sarajog
как в первом запросе: r.roles. – Rudra