当前位置: 首页 > 知识库问答 >
问题:

无法从类型[java.lang.Object[]]转换为类型[@org.springframework.data.jpa.repository.Query

苏嘉歆
2023-03-14

我有使用JPA/Hibernate、MySQL的Spring boot项目。我有三个多对多关系的道类。

Poko类如下所示

产品

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

ProductExtra公司

@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.对象[]]转换为类型[@org.springframework.data.jpa.repository.查询错误消息令人惊讶地也包含我想要的结果。不确定我做错了什么

共有1个答案

谷梁镜
2023-03-14

删除SELECT子句:

@Query("FROM Extra join e.productExtra WHERE pe.productId = ?1")

还要记住,您不是编写SQL查询,而是处理对象,所以对于join,您使用mapped属性

 类似资料:
  • 在下面来自的语法中,泛型类型参数在实例化原始类型数组后用于类型转换,

  • 问题内容: 我有以下几行代码 我认为第3行和第4行执行相同的任务,然后为什么编译器在第4行显示错误“类型不匹配:无法从long转换为int” 请帮忙。 问题答案: 这是因为复合赋值运算符会进行隐式转换。 从JLS复合分配运算符: 形式的复合赋值表达式等效于,其中是的类型,不同之处在于该表达式仅被评估一次。 对于二进制运算符,则必须显式进行强制转换。进行第四项作业: 它会工作。这就是您的复合赋值表达

  • 问题内容: 我正在使用ZXING库在JAVA中创建QR码生成器程序。该程序是 编译该程序时,出现类型不匹配错误, 在这条线 请帮忙!!! 问题答案: 我自己从未使用过该库,但是阅读错误消息时,我会假设您必须要以字节为单位存储字节的问题。问题将是一个字节由多个位组成,因此您不能仅通过一位表示一个字节。 将编码数据存储到ByteMatrix中,然后阅读以下内容: 使用zxing进行QR码编码和解码 完

  • 但它抱怨说: 如何同时解决这两个错误?

  • 问题内容: 以下代码抛出编译时异常 类型不匹配:无法从整数转换为K 我了解的是应该处理任何扩展的价值。 (注意:这只是一个测试代码,用于提出我的问题,而没有提供与我的实际情况无关的详细信息。) 问题答案: 这里的问题是这样的事实:它是一个可扩展的类型,但它是该类型的一个 未知 子类,这就是为什么编译器会引发此错误,因为它只是该子类的一个特定子类,因此它无法与任何潜在的目标类型匹配,因此会引发此错误

  • 这是我的数据库结构。我正试图获取订单的详细信息。 这是代码 但我得到了这个错误 这是我得到错误的线 有什么帮助或建议吗?