2016-08-15 1 views
0

Ich versuche, aggregierte Daten aus einem JPAR-Repository in meiner Anwendung abzurufen. Die SQL-Analogie so etwas wie wäre:Get aggregierte Abfrage Ergebnis in JPAR-Repository

SELECT c.sex as Sex, count(c.sex) as Count 
FROM customer c 
GROUP BY c.sex 

Das Unternehmen ist:

@Entity(name = "customer") 
public class Customer { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    private Person.Sex sex; 
    ... 
} 

und meine JPARepository ist:

public interface CustomerRepository extends JpaRepository<Customer, Long> { 

    @Query(value = "SELECT c.sex as Sex, count(c.sex) as Count FROM customer c") 
    List<Object[]> countBySex(); 
} 

Der SQL-Ansatz zurückzukehren kein Ergebnis, warum tut es nicht, und gibt es keine SQL-Wege?

Ich verwende Spring 1.4.0.RELEASE.

Vielen Dank im Voraus!

EDIT: Der SQL-Ansatz funktionierte, als ich die persistence.xml-Konfiguration für JPA mit der Zuordnung der betreffenden Klasse (Customer.class) hinzugefügt.

Antwort

0

Die SQL-Ansatz gearbeitet, als ich persistence.xml Konfiguration für JPA mit der Zuordnung der betreffenden Klasse (Customer.class) hinzugefügt. Andernfalls hat die Anwendung die Tabelle 'Kunde' nicht von der Abfrage erkannt.

Der persistence.xml Code ist unten:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 

<persistence-unit name="jpa.sample.plain"> 
    <class>net.datamanager.application.Customer</class> 
    <properties> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect" /> 
     <property name="hibernate.connection.url" value="jdbc:hsqldb:mem:spring" /> 
     <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver" /> 
     <property name="hibernate.connection.username" value="sa" /> 
     <property name="hibernate.connection.password" value="" /> 
     <property name="hibernate.hbm2ddl.auto" value="create-drop" /> 
    </properties> 
</persistence-unit> 

0

Um benutzerdefinierte Datensätze aus der Domäne oder Tabelle zu erhalten, müssen wir anderen Ansatz folgen. können wir das Ergebnis mit jdbcTemplate und binden Sie es mit dto mit Zeilenmapper-Klasse.

Für weitere Details gehen Sie bitte durch den link