Spring boot JPA查询在两个属性之间相等

Spring boot JPA查询在两个属性之间相等,spring-boot,spring-data,spring-data-jpa,Spring Boot,Spring Data,Spring Data 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.

是否可以使用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;

}
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);

 }
公共接口注册DAO扩展了CRUDEPository{
按EntryLastNameASC(规划)查找计划和费率活动相等计划活动订单;
}

谢谢

我已经更改了此解决方案,但我认为这不是一个好方法(rateActivity和planningActivity必须具有相同的id)

公共接口注册DAO扩展了CRUDEPository{
Iterable Find By Planning and Rate Activity Equals and Planning Activity Equals Order By EntryLastName ASC(计划计划、活动费率活动、活动计划活动);
}

您可以使用一个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);
@Query(“从注册登记中选择*,条目E,费率R,计划P,其中REG.id=:id和R.activity=P.activity ORDER BY E.lastname”)
公共列表(@Param(“id”)字符串注册id);

JPQL允许比较JPA实体的许多字段。你在JPA实体模型中提出的“模型”不是一个JPA实体模型。当然,它是为了简化。那么你的问题是什么?如何在头脑中形成一个特定的JPQL查询(因为所有的JPA教程都涉及到这一点),或者您真的是指SpringDataJPA吗?我想做一些类似rates.activity.id=planning.activity.id的事情。如何处理JPA关键词。当然,
findbplanning和rate活动equals计划活动orderbyentrylastname asc
不起作用没有“rates”字段,所以不知道这是什么意思。至于一些很长的方法名,我猜这是SpringDataJPA(因为没有人会使用自己选择的名称)。。。在这种情况下,也许你应该把这个问题贴上那样的标签。最后,这就是我所做的
从注册r JOIN r.planning p JOIN r.rate rt中选择p,其中p.uuid=:planning和p.activity=rt.activity group by r.entry.lastname,rt.type.id
。谢谢
public interface RegistrationDao extends CrudRepository<Registration, UUID> {

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

}
@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);