无法从类型 [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

查看:105
本文介绍了无法从类型 [java.lang.Object[]] 转换为类型 [@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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆