Fehler beim konvertieren vom Typ [java.lang.Object[]] zu geben

Ich spring web app (JPA/Hibernate + MySQL).
Ich habe zwei DAO-Klassen.

CustomerDAO

@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<>();

Und ich habe eine Klasse zum abrufen von Daten aus DB:

@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();

}

Es ist mir z.B. Folgendes Ergebnis:

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

Nun will ich 'unbox' Daten aus DB mit dieser Methode List<Customer> findCustomersBySumOfAmount()

Ich habe die Methode für das in meiner spring-controller-Klasse:

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

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

Und ich habe Fehler:

Failed to convert from type [java.lang.Object[]] zu geben
[com.twistezo.Modelle.Kunde] für Wert " {Bielecki, 141.49}'; geschachtelte
Ausnahme ist
org.springframework.core.konvertieren.ConverterNotFoundException: Nein
Konverter gefunden, die in der Lage Konvertierung von type [java.lang.String] zu
type [com.twistezo.Modelle.Kunde]

Ich nehme an, es ist weil ich bin immer List<Object[]>. Ich weiß, dass ich die Iteration zwischen dieser List<Object[]> meiner Daten, aber vielleicht gibt es eine einfachere Möglichkeit zum abrufen von Daten direkt an <Customer> ? Ich bin neu in diesem Zeug. Da ich jetzt verwendeten Methoden wie List<Customer> findAll() ohne @Query annotation und ich bin auf der Suche nach ähnlichen "unboxing".

Ich versuchte etwas wie das hier tun (hinzufügen Customer.class in Abfrage) ohne Wirkung:

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

InformationsquelleAutor twistezo | 2017-02-24
Schreibe einen Kommentar