У меня есть две сущности (работа, профиль).Работа имеет два поля профиля (создатель, цессионарий).У меня есть CrudRepository из весенних данных jpa с пользовательским запросом (hql), в котором мне нужно получить все работы с указанным идентификатором профиля (либо создателем, либо работником) и присоединиться к выборке только тех профилей, которые не равны указанному идентификатору профиля.
public class Work {
@Id
private String id;
@ManyToOne(optional = false, fetch = FetchType.LAZY)
@JoinColumn(name = "created_by_id", updatable = false, nullable = false, insertable = false)
private Profile createdBy;
@Column(name = "created_by_id", updatable = false, nullable = false)
private String createdById;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "assignee_id", updatable = false, insertable = false)
private Profile assignee;
@Column(name = "assignee_id")
private String assigneeId;
}
class Profile {
@Id
private String id;
private String name;
}
public interface WorkRepository extends CrudRepository<Work, String> {
@Query("SELECT d, (CASE WHEN d.createdById = :profileId THEN d.assignee ELSE d.createdBy END) FROM Dialog d JOIN FETCH d.assignee JOIN FETCH d.createdBy WHERE d.profileId = :profileId OR d.creatorId = :profileId")
List<Dialog> findAllByUserId(@Param("profileId") String profileId);
}
Я ожидаю получать диалоги только с одним профилем, но я получаю оба, что не очень хорошо из-за производительности.