2016-05-07 20 views
0

Ich habe eine Prozedur, die Zeilen zurückgibt.
Jede Reihe hat eine Spalte, die ein String ist, wie so ..Spring Data Prozeduraufruf

create procedure myproc(IN var1 varchar(255), IN var2 varchar(255)) 
begin 
    select col3 from table1 where col1 = var1 and col2 = val2; 
end; 
/

ich dieses Verfahren mit Spring Data aufrufen wollen.

Die Spring Data Handbuch sagt, ich dieses Verfahren in einem Repository
von einer Methode aufrufen könnte, die mit @Procedure kommentierte wird
wie so ..

@Procedure(procedureName = "myproc") 
List<String> myproc(String val1, String val2); 

Meine Frage .. So sollte die Repository-Klasse, die die kommentierten Methode enthalten wird,
deklariert werden als

es so sein sollte ..

class MyRepository extends JpaRepository<T,ID>{ 
} 

Wenn ja, welche Art Parameter soll ich für T verwenden und ID
Soll ich unbedingt eine Entity-Klasse erstellen, zu ersetzen T oben
Wenn ja, was ein geeigneter Typ ist für ID in diesem Fall
Und müsste ich eine Tabelle in der Datenbank erstellen, um diese Entität zu halten?

Antwort

0

Federdaten jpa folgt der 'domain driven design'. Also ich denke, es ist zwingend erforderlich, Domain übergeben. Ihre Domain ist wie

@Entity 
public class Person { 

    @Id 
    @GeneratedValue 
    private Long id; 
    .... getter setter... 

} 

Ihr Repository wie unter

public interface PersonRepository extends JpaRepository<Person, Long> { 

    @Procedure(procedureName = "myproc") 
    List<String> myproc(String val1, String val2); 

} 
  1. Sie müssen sein, sollten Sie Ihre Domain-Klasse als T passieren
  2. Sie müssen Datentyp id Feld Person passieren Klasse als ID, In diesem Fall ist es ein Long

Für weitere Informationen mit Beispiel https://dzone.com/articles/calling-stored-procedures-from-spring-data-jpa