Я получил ожидаемые результаты в Spring-data jpa с
public final static String FIND_BY_ID_STATE = "SELECT a FROM Table1 a RIGHT JOIN a.table2Obj b " +
"WHERE b.column = :id" +
"AND a.id NOT IN (SELECT c.columnFromA from a.table3Obj c where state = :state)";
@Query(FIND_BY_ID_STATE)
public List<Alert> findXXXXXXXX(@Param("id") Long id, @Param("state") Long state);
, где
Table2Obj и Table3Obj - это отображение отношений между сущностями Table1 и Table2, Table3 соответственно.
определено, как показано ниже.
@OneToMany(mappedBy = "xxx", fetch = FetchType.LAZY)
private Set<Table2> table2Obj = new HashSet<>();