весенний репозиторий EntityGraph JoinFormula Lazy загружается даже когда я не хочу - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть 3 сущности, Mouvement ссылки Agent и Poste. Я не могу присоединиться непосредственно к почте и агенту, потому что это зависит от даты движения.

@NamedEntityGraph(name = "graph.Agent.poste",
        attributeNodes = @NamedAttributeNode(value = "poste"))
@Entity
@Table(name = "agent")
public class Agent extends RestaurableEntity<Long>  {
    //fields firstname lastname birthdate...
     @ManyToOne(fetch = FetchType.LAZY)
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @JoinFormula("(" +
            "SELECT TOP 1 CASE WHEN (tm.arrivee=1 ) THEN m.id_poste ELSE (NULL) END " +
            "FROM mouvement m, type_mouvement tm " +
            "WHERE m.id_agent = id " +
            "AND m.id_type_mouvement=tm.id "+
            "AND m.supprime=0 "+
            "AND m.date<=GETDATE() "+
            "ORDER BY m.date DESC " +
            ")")
    private Poste poste;

}
@Entity
@Table(name = "poste")
@NamedEntityGraph(name = "graph.Poste.agent",
        attributeNodes = @NamedAttributeNode(value = "agent", subgraph = "agent"))
public class Poste extends RestaurableEntity<Integer> {
     @ManyToOne(fetch = FetchType.LAZY)
    @JoinFormula("(" +
            "SELECT TOP 1 CASE WHEN (tm.arrivee=1) THEN m.id_agent ELSE (NULL) END " +
            "FROM mouvement m, type_mouvement tm " +
            "WHERE m.id_poste = id " +
            "AND m.id_type_mouvement=tm.id " +
            "AND m.supprime=0 " +
            "AND m.date<=GETDATE() " +
            "ORDER BY m.date DESC " +

            ")")

    private Agent agent;
}
@Entity
@Table(name = "mouvement")
public class Mouvement extends RestaurableEntity<Long> {

    @Column(name = "date", nullable = false)
    private Date date;

    @ManyToOne
    @JoinColumn(name = "id_agent")
    private Agent agent;

    @ManyToOne
    @JoinColumn(name = "id_poste", nullable = false)
    private Poste poste;
}
@Transactional
public interface AgentRepository extends JpaRepository<Agent, Long> {
  @EntityGraph(value="graph.Agent.poste",type = EntityGraph.EntityGraphType.LOAD)
    @Query("select a from Agent a")
    List<Agent> findAllWithPoste();
}

Моя проблема в том, что когда я вызываю findAllWithPoste (), я получаю список агентов с их почтовым сообщением, но я также получаю агент в почтовом отделении, который я не хочу загружать, чтобы сэкономить время. Кто-нибудь знает, как загрузить почту без загрузки агента внутри почты?

PS: я уже пытался преобразовать свой JoinFormula в метод репозитория, но это не сработало.

 @Query("select new Agent(a,( select limit 1 p from Mouvement m, Poste p where m.agent.id=a.id and m.id_poste=p.id and m.date<= current_date() order by m.date desc) )  from Agent a")
    List<Agent> findAllWithPoste();
...