Извлечь одно из двух полей одного и того же типа, используя HQL, и указать, какие из полей следует выбрать - PullRequest
0 голосов
/ 01 июля 2019

У меня есть две сущности (работа, профиль).Работа имеет два поля профиля (создатель, цессионарий).У меня есть 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);
}

Я ожидаю получать диалоги только с одним профилем, но я получаю оба, что не очень хорошо из-за производительности.

...