2014-05-07 8 views

risposta

2

Ho affrontato lo stesso problema di recente con il database JPA e H2. Ho provato a chiamare la funzione GROUP_CONCAT da JPQL con una funzione invocata (vedi sotto) senza successo. Infine, ho usato una chiamata di query nativa .

Tuttavia, lo JPA 2.1 specifications menziona che è possibile chiamare (funzione di chiamata) una funzione di database predefinita o definita dall'utente sia scalare che aggregata. Ho riprodotto in seguito il paragrafo dalla specifica per evidenziando la parte pertinente.

4.6.17.3 Invocazione di predefiniti e funzioni database definito dall'utente

L'invocazione di funzioni diverse dalle funzioni built-in del linguaggio di interrogazione Java Persistence è supportato mediante la sintassi function_invocation. Ciò include l'invocazione di funzioni di database predefinite e funzioni di database definite dall'utente.

function_invocation::= FUNCTION(function_name {, function_arg}*) 
function_arg ::= 
     literal | 
     state_valued_path_expression | 
     input_parameter | 
     scalar_expression 

L'argomento function_name è una stringa che indica la funzione del database che deve essere richiamata. Gli argomenti devono essere adatti alla funzione del database che deve essere invocata. Il risultato della funzione deve essere adatto al contesto di chiamata.

La funzione può essere una funzione definita dal database o una funzione definita dall'utente. La funzione può essere una funzione scalare o una funzione aggregata.

Le applicazioni che utilizzano la sintassi function_invocation non saranno trasferibili tra i database.

Esempio:

SELECT c 
FROM Customer c 
WHERE FUNCTION(‘hasGoodCredit’, c.balance, c.creditLimit) 

Riferimento: Java Persistence 2.1, Final Release

Problemi correlati