2016-03-14 4 views
1

Можно сравнить два свойства с пользовательским запросом JPA?Запрос JPA равен двум свойствам

Registration.java:

@Entity 
public class Registration implements Serializable { 

@Id 
@GeneratedValue(generator = "uuid") 
private UUID uuid; 

@ManyToOne(targetEntity=Entry.class) 
private Entry entry; 

@ManyToMany(targetEntity=Rate.class,fetch = FetchType.EAGER) 
private List<Rate> rate; 

@ManyToMany(fetch = FetchType.EAGER) 
private List<Planning> planning; 

} 

Rate.java:

@Entity 
public class Rate implements Serializable { 

@Id 
@GeneratedValue(generator = "uuid") 
private UUID uuid; 

@ManyToOne 
private Activity activity; 
} 

Planning.java:

@Entity 
public class Planning implements Serializable { 

@Id 
@GeneratedValue(generator = "uuid") 
private UUID uuid; 

@OneToOne 
private Location location; 

@OneToOne(fetch = FetchType.EAGER) 
private Coach coach; 

@OneToOne 
private Activity activity; 

Я бы получить только rate.activity.id = planning.activity .id с чем-то вроде:

public interface RegistrationDao extends CrudRepository<Registration, UUID> { 

    findByPlanningAndRateActivityEqualsPlanningActivityOrderByEntryLastnameAsc(Planning planning); 

} 

Благодаря

+0

JPQL позволяет сравнивать многие поля объектов JPA. «Модель», которую вы представляете не в модели сущности JPA. –

+0

Конечно, это должно было упроститься. – Mezoo

+0

так в чем ваш вопрос? Как сформировать запрос JPQL с чем-то конкретным (потому что все учебники JPA охватывают это), или вы действительно что-то значили в Spring Data JPA? –

ответ

1

Вместо того, чтобы иметь длинное имя метода у вас может быть запрос JPA, это будет что-то вроде этого. Надеюсь это поможет.

@Query("select * FROM Registration REG,Entry E, Rate R,Planning P WHERE REG.id = :id and R.activity=P.activity ORDER BY E.lastname") 

public List<Registration> <MethodName>(@Param("id") String registrationid); 
+0

Наконец, это то, что я сделал. 'SELECT p FROM Регистрация r JOIN r.planning p JOIN r.rate rt WHERE p.uuid =: планирование и группа p.activity = rt.activity by r.entry.lastname, rt.type.id'. БЛАГОДАРЯ – Mezoo

0

Я изменил для этого решения, но я не думаю, что это хороший подход (где rateActivity и planningActivity должны иметь один и тот же идентификатор)

public interface RegistrationDao extends CrudRepository<Registration, UUID> { 

    Iterable<Registration> findByPlanningAndRateActivityEqualsAndPlanningActivityEqualsOrderByEntryLastnameAsc(Planning planning,Activity rateActivity,Activity planningActivity); 

} 
Смежные вопросы