Reputation: 1257
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
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
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