2012-04-09 6 views
0

Ich versuche, die letzten 5 eingefügten Daten in der Tabelle 'Vulcano' aus der Tabelle 'Ausführung' abzurufen, verwende EclipseLink, Facade-Klasse, die diese Abfrage aufruft der Moment;Wie die letzten 2 Datensätze in einer Tabelle mithilfe von JPA in Java abgerufen werden

Hier ist ein Teil der Fassade Klasse am verwenden;

public ArrayList<ExecutionPOJO> getLatestsVulcanoExecutions() { 
    ArrayList<ExecutionPOJO> vulcanoExecutions = new ArrayList<ExecutionPOJO>(); 
    //SELECT x FROM Magazine x order by x.title asc, x.price desc 

    **List<Execution> excutionVulcanoList = em.createQuery("select s from Execution s order by s.vulcano_idVulcanoID desc limit 2 ").getResultList();** 

Wenn ich die obige Abfrage verwenden bekomme ich diesen Fehler:

Caused by: java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager: 
Exception Description: Syntax error parsing the query [select s from Execution s order by s.vulcano desc limit 2], line 1, column 50: syntax error at [limit]. 
Internal Exception: MismatchedTokenException(80!=-1) 

Aber wenn ich das Limit Tag ich diesen Fehler entfernen;

Caused by: Exception [EclipseLink-8021] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.JPQLException 
Exception Description: Error compiling the query [select s from Execution s order by s.vulcano desc], line 1, column 36: invalid ORDER BY item [s.vulcano] of type [uk.ac.aston.tomtom.entity.Vulcano], expected expression of an orderable type. 

.

@Entity 
public class Execution implements Serializable { 
    ... 
@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
private int idExecution; 

@ManyToOne(targetEntity = Vulcano.class) 
private Vulcano vulcano; 

*//Few others @ManyToOne 
//also @oneToMany* 

    public Vulcano getVulcano() { 
    return vulcano; 
} 

public void setVulcano(Vulcano vulcano) { 
    this.vulcano = vulcano; 
    } 

//other getter and setter 
} 

Hier ist eine andere Entität;

@Entity 
public class Vulcano implements Serializable { 
    ... 
@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
private int idVulcano; 

@OneToMany(targetEntity=Execution.class, mappedBy="vulcano", cascade=CascadeType.ALL) 
private List<Execution> executions; 

    public List<Execution> getExecutions() { 
    return executions; 
} 

public void setExecutions(List<Execution> executions) { 
    this.executions = executions; 
} 

//other getters and setters 

Antwort

0

SELECT * FROM Magazine x order by x.title asc, x.price desc 

statt

SELECT x from Magazine x ... 
+0

nicht in der Lage sein, Stern zu verwenden, da es einen Fehler warf; Ausnahme Beschreibung: Syntaxfehler beim Analysieren der Abfrage [Wählen Sie * aus Ausführungsreihenfolge von s.vulcano desc], Zeile 1, Spalte 7: unerwartetes Token [*]. – user1321704

+0

@ user1321704: Wählen Sie die Spalten, die Sie lesen möchten, wie 'wählen Sie col1, col2, col3 aus der Zeitschriftenbestellung nach Titel asc, Preisbezeichnung 'aus –

0

Grenze nicht Teil JPQL ist und so kann nicht verwendet Versuchen werden. Stattdessen würden Sie setMaxResults für die Abfrage aufrufen, um die zurückgegebenen Ergebnisse einzuschränken.

Oder Sie können eine native SQL-Abfrage verwenden, bei der Select * mit dem EntityManager createNativeQuery api anstelle von createQuery funktionieren würde.

Verwandte Themen