无法从类型 [java.lang.Object[]] 转换为类型 [@org.springframework.data.jpa.repository.Query [英] Failed to convert from type [java.lang.Object[]] to type [@org.springframework.data.jpa.repository.Query
问题描述
我有使用 JPA/Hibernate、MySQL 的 Spring Boot 项目.我有三个具有多对多关系的 dao 类.
I have spring boot project using JPA/Hibernate, MySQL. I have three dao classes that have a many to many relationship.
Poko 类看起来像这样
The Poko classes look like this
产品
@Entity
@Table(name = "product")
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true, nullable = false, columnDefinition = "integer")
private Integer id;
@Column(name = "name")
private String name;
@Column(name = "price")
private Double price;
@ManyToMany(cascade = {
CascadeType.PERSIST,
CascadeType.MERGE
})
@JoinTable(
name = "product_extra",
joinColumns = @JoinColumn(name="product_id"),
inverseJoinColumns = @JoinColumn(name="extra_id")
)
private List<Extra> extras = new ArrayList<>();
//constructor getters and setters
}
产品附加
@Entity
@Table(name = "product_extra")
public class ProductExtra {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true, nullable = false, columnDefinition = "integer")
private Integer id;
@Column(name = "product_id")
private Integer productId;
@Column(name = "extra_id")
private Integer extraId;
//constructor getters and setter
}
额外
@Entity
@Table(name = "extra")
public class Extra {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true, nullable = false, columnDefinition = "integer")
private Integer id;
@Column(name = "name")
private String name;
@Column(name = "price")
private Double price;
@ManyToMany(mappedBy = "extras")
private List<Product> products = new ArrayList<>();
//constructor getters and setters
}
带有查询的额外存储库
public interface ExtraRepository extends JpaRepository<Extra, Integer> {
@Query("SELECT e.id, e.name, e.price FROM Extra e INNER JOIN ProductExtra pe ON e.id = pe.extraId WHERE pe.productId = ?1")
List<Extra> findExtraById(Integer productId);
}
控制器中的映射
@GetMapping("/product/{productId}")
public List<Extra>getExtraById(@PathVariable("productId") final Integer productId){
return extraRepository.findExtraById(productId);
}
我正在尝试进行多对多查询以选择每个产品中的附加内容,但是我收到此错误 无法从类型 [java.lang.Object[]] 转换为类型 [@org.springframework.data.jpa.repository.Query
错误消息令人惊讶地也包含我想要的结果.不知道做错了什么
I am trying to make a many to many query to select The extras in each product, i am however getting this error Failed to convert from type [java.lang.Object[]] to type [@org.springframework.data.jpa.repository.Query
the error message surprisingly also contains the results i want. Not sure what am doing wrong
推荐答案
删除 SELECT
子句:
@Query("FROM Extra join e.productExtra WHERE pe.productId = ?1")
还要记住,您不是在编写 SQL 查询,而是在处理对象,因此对于连接,您使用映射属性
Also keep in mind, that you not write an SQL Query, You work on Object, so for join you use the mapped property
这篇关于无法从类型 [java.lang.Object[]] 转换为类型 [@org.springframework.data.jpa.repository.Query的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!