Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
方法公共抽象java.util.List的查询验证失败_Java_Spring Mvc_Spring Boot_Spring Data_Spring Data Jpa - Fatal编程技术网

方法公共抽象java.util.List的查询验证失败

方法公共抽象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

我有一个基本的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 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
is
User

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 return
us
哪一个用户是您的列表,如果类型为
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);