Dwix
Dwix

Reputation: 1257

Custom @Query in Spring Data Repository through multiple entities

I have 4 JPA Entities as following:

Entity Farm :

@Entity
public class Farm implements Serializable {

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long idFarm;
    private String nameFarm;
}

Entity SAU :

@Entity
public class SAU implements Serializable {

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long idSau;
    private String nameSau;
    @OneToOne
    @JoinColumn(name="farm_id")
    private Farm farm;
}

Entity Part :

@Entity
public class Part implements Serializable {

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long idPart;
    private String namePart;
    @ManyToOne
    @JoinColumn(name = "sau_id")
    private Sau sau;
}

Entity Cult :

@Entity
public class Cult implements Serializable {

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long idCult;
    private String nameCult;
    @OneToOne
    @JoinColumn(name = "part_id")
    private Part part;
}

I need to retrieve a Collection of Cult objects Where farm_id = x, I obviously can't do it by using the convention naming of methods like :

public Collection<Cult> = findCultByPartBySauByFarmIdFarm(Long idFarm);

I can't figure out how to write the custom @Query either for this case in Spring Data Repository.

Upvotes: 0

Views: 2052

Answers (2)

Desorder
Desorder

Reputation: 1539

Another version without explicit joins.

@Query("select c from Cult c where c.part.sau.farm.idFarm = ?1")
public Collection<Cult> findCultByFarmId(Long idFarm);

I usually prefer to use this as I let the underline implementation to deal with the joins for me.

Upvotes: 4

Ralph
Ralph

Reputation: 120771

Try:

@Query("select c from Cult c join c.part p join p.sau s join s.farm f where f.idFarm = ?1")
public Collection<Cult> = findCultByFarmId(Long idFarm);

Upvotes: 2

Related Questions