无法从类型 [java.lang.Object[]] 转换为类型

2023-12-22

我有 Spring Web 应用程序(JPA/Hibernate + MySQL)。 我有两个 DAO 类。

客户DAO

@Entity
@Table(name = "customers")
public class Customer {

  @Id
  @Column(name = "customer_id")
  @GeneratedValue(strategy = GenerationType.AUTO)
  private Long id;

  @Column(name = "name", length = 50)
  private String name;

  @Column(name = "surname", length = 50)
  private String surname;

  @OneToMany(mappedBy = "customer")
  private Set<Order> orders = new HashSet<>();
}

OrderDAO

@Entity
@Table(name = "orders")
public class Order {

  @Id
  @Column(name = "order_id")
  @GeneratedValue(strategy = GenerationType.AUTO)
  private Long id;

  @Column(name = "date")
  private Date date;

  @Digits(integer = 5, fraction = 2)
  @Column(name = "amount")
  private BigDecimal amount;

  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn(name = "customer_id")
  private Customer customer;

  @OneToMany(mappedBy = "order")
  private Set<OrderDetail> ordersDetails = new HashSet<>();

我有一个从数据库检索数据的类:

@Repository
public interface OrderDAO extends JpaRepository<Order, Long> {

    @Query("select o.customer.surname, sum(o.amount) as s from Order as o group by o.customer")
    List<Customer> findCustomersBySumOfAmount();

}

它给我的结果是这样的:

+---------+---------------+
| surname | sum of amount | 
+---------+---------------+
|Bielecki | 141.49        | 
|Bielen   | 130.34        |
......

现在我想用这种方法从数据库中“拆箱”数据List<Customer> findCustomersBySumOfAmount()

我的 spring 控制器类中有这样的方法:

 List<Customer> findCustomersBySumOfAmount = orderService.findCustomersBySumOfAmount();
 model.addAttribute("findCustomersBySumOfAmount", findCustomersBySumOfAmount);

 for(Customer c : findCustomersBySumOfAmount) {
     String s = c.getSurname();
     System.out.println(c);
 }

我有错误:

无法从类型 [java.lang.Object[]] 转换为类型 [com.twistezo.models.Customer] 对于值“{Bielecki,141.49}”;嵌套的 例外是 org.springframework.core.convert.ConverterNotFoundException:否 发现转换器能够从类型 [java.lang.String] 转换为 输入 [com.twistezo.models.Customer]

我想这是因为我得到List<Object[]>。我知道我可以在这之间迭代List<Object[]>我的数据,但也许有一些更简单的方法可以直接检索数据<Customer>?我是这方面的新手。从现在开始我使用了类似的方法List<Customer> findAll()没有 @Query 注释,我正在寻找类似的“拆箱”。

我试图做这样的事情(在查询中添加 Customer.class)但没有效果:

@Query("select o.customer.surname, sum(o.amount) as s from Order as o group by o.customer", Customer.class) List<Customer> findCustomersBySumOfAmount();


我已经收到此错误消息。就我而言,我正在执行类似以下代码的操作:

@Repository
public interface RepositoryA extends CrudRepository<EntityA, Long> {

  @Query(nativeQuery = true, value = " ...SQL_1... ")
  List<EntityA> getListOfEntityA(...PARAMS_1...);

  @Query(nativeQuery = true, value = " ...SQL_2... ")
  List<EntityB> getListOfEntityB(...PARAMS_2...);

}

我使用“EntityA”参数化存储库接口,并使用其他方法返回使用“EntityB”参数化的其他类型。

在您的情况下,您使用“Order”参数化 JpaRepository,然后使用返回“Customer”列表的方法...也许这导致了此异常。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法从类型 [java.lang.Object[]] 转换为类型 的相关文章

随机推荐