【发布时间】:2017-07-15 17:59:48
【问题描述】:
我有 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();
【问题讨论】:
标签: java mysql spring hibernate jpa