方法公共抽象java.util.List的查询验证失败
我有一个基本的SpringBoot应用程序。使用Spring初始值设定项、JPA、嵌入式Tomcat、Thymeleaf模板引擎,并将包作为可执行JAR文件。 SpringBoot的版本是2.0.1.0版本。 我已经用这个方法创建了一个从Crudepository扩展而来的类存储库方法公共抽象java.util.List的查询验证失败,java,spring-mvc,spring-boot,spring-data,spring-data-jpa,Java,Spring Mvc,Spring Boot,Spring Data,Spring Data Jpa,我有一个基本的SpringBoot应用程序。使用Spring初始值设定项、JPA、嵌入式Tomcat、Thymeleaf模板引擎,并将包作为可执行JAR文件。 SpringBoot的版本是2.0.1.0版本。 我已经用这个方法创建了一个从Crudepository扩展而来的类存储库 @Query("select us.priceAlertsTapas.tapa from User us left join us.priceAlertsTapas pat left join pat.tapa t
@Query("select us.priceAlertsTapas.tapa from User us left join us.priceAlertsTapas pat left join pat.tapa tapa where pat.priceAlert = ?1")
List<Tapa> tapasByUserPriceAlert (PriceAlert pa);
这里,用户对象:
@Entity
@Table(name="t_user")
public class User implements Serializable, UserDetails {
...
@ManyToMany
@JoinTable(
name="t_user_price_alert_tapa",
joinColumns=@JoinColumn(name="user_id", referencedColumnName="id"),
inverseJoinColumns=@JoinColumn(name="price_alert_tapa_id", referencedColumnName="id"))
private Set<PriceAlertTapa> priceAlertsTapas = new HashSet<>();
}
及
如果您只对最右边的实体感兴趣,那么您没有理由使用左(外部)联接—尽管我不确定这是否是查询验证失败的原因 我想试试这个:
@Query("select tapa fom PriceAlertsTapas pat join pat.tapa tapa where pat.priceAlert = ?1")
List<Tapa> tapasByUserPriceAlert (PriceAlert pa);
@Query(“选择tapa fom PriceAlertsTapas pat join pat.tapa tapa where pat.priceAlert=?1”)
列出tapasByUserPriceAlert(PriceAlert pa);
如果给定的“tapa”可以与“价格警报”有多个关联(例如每个用户一个),那么您将在您的返回列表中多次找到它。解决方案是将返回类型更改为Set
,或者在查询中使用“select distinct…”
另一方面,如果PriceAlertsTapas是一个简单的多对多关联,那么最好使用@ManyToMany JPA注释,最终使用@JoinTable。例如,请参见。您有此异常,因为您的选择错误:
us
isUser
us.priceAlertsTapas
是Set
在此之后,您需要从中获取tapa
,但是Set
没有这样的字段 由于设置了priceAlertsTapas,因此不能使用点路径
@Query("select us.priceAlertsTapas.tapa from User us")
首先你需要加入它
@Query("select pat.tapa from User us join us.priceAlertsTapas pat")
我在@Query()
中使用表名时遇到此错误,但您必须在@Query()
中使用类名:
不正确:
@Transactional
@Modifying
@Query("from SHIPPING_DOC e where e.fulfillmentId in ?1")
List<ShippingDocumentsJsonEntity> deleteByFulfillmentIdIn(List<String> fulfillmentIds);
@Transactional
@修改
@查询(“来自装运单据e,其中e.在?1中完成”)
列表deleteByFulfillmentId(列表FulfillmentId);
正确:
@Transactional
@Modifying
@Query("from ShippingDocumentsJsonEntity e where e.fulfillmentId in ?1")
List<ShippingDocumentsJsonEntity> deleteByFulfillmentIdIn(List<String> fulfillmentIds);
@Transactional
@修改
@查询(“来自ShippingDocumentsJSONE实体,其中e.fulfillmentId在?1中”)
列表deleteByFulfillmentId(列表FulfillmentId);
Your query returnus
哪一个用户是您的列表,如果类型为Tapa
您看到了吗?您可以发布您的实体类和PriceAlert类吗?我在用户实体中使用@ManyToMany关系和PriceAlertStatPasno,尝试使用pat.tapa
而不是us.priceAlertsTapas.tapa
@enPeris..ElgothdelaCiutat如果不指定顺序,则可能会在关系和result@enPeris..ElgothdelaCiutat如果我的回答对你有帮助,我能接受赏金吗?当然,对不起:-)效果很好。非常感谢。
@Query("select us.priceAlertsTapas.tapa from User us")
@Query("select pat.tapa from User us join us.priceAlertsTapas pat")
@Transactional
@Modifying
@Query("from SHIPPING_DOC e where e.fulfillmentId in ?1")
List<ShippingDocumentsJsonEntity> deleteByFulfillmentIdIn(List<String> fulfillmentIds);
@Transactional
@Modifying
@Query("from ShippingDocumentsJsonEntity e where e.fulfillmentId in ?1")
List<ShippingDocumentsJsonEntity> deleteByFulfillmentIdIn(List<String> fulfillmentIds);