You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Manuel Núñez (Jira)" <ji...@apache.org> on 2020/05/13 07:42:00 UTC
[jira] [Updated] (IGNITE-13005) Spring Data 2 - JPA Improvements
and working with multiple Ignite instances on same JVM
[ https://issues.apache.org/jira/browse/IGNITE-13005?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Manuel Núñez updated IGNITE-13005:
----------------------------------
Description:
I have it working for Spring Data 2 (2.7.6) module with some interesting improvements, but by now I don't have enough time to give it the attention it requires, full unit/integration tests..., sorry a lot. ¿maybe any of you have the time?. Thanks community!!
Code is 100% compatible with previous versions. [https://github.com/hawkore/ignite-hk/tree/master/modules/spring-data-2.0]
* Supports multiple ignite instances on same JVM (@RepositoryConfig).
* Supports query tuning parameters in {{@Query}} annotation
* Supports projections
* Supports {{Page}} and {{Stream}} responses
* Supports Sql Fields Query resultset transformation into the domain entity
* Supports named parameters ({{:myParam}}) into SQL queries, declared using {{@Param("myParam")}}
* Supports advanced parameter binding and SpEL expressions into SQL queries:
** *Template variables*:
*** {{#entityName}} - the simple class name of the domain entity
** *Method parameter expressions*: Parameters are exposed for indexed access ({{[0]}} is the first query method's param) or via the name declared using {{@Param}}. The actual SpEL expression binding is triggered by {{?#}}. Example: \{{?# {[0]}
}} or {{?#
{#myParamName}
}}
*
** *Advanced SpEL expressions*: While advanced parameter binding is a very useful feature, the real power of SpEL stems from the fact, that the expressions can refer to framework abstractions or other application components through SpEL EvaluationContext extension model.
* Supports SpEL expressions into Text queries ({{TextQuery}}). Examples:
@Query(value = "SELECT * from #{#entityName} where email = :email")
User searchUserByEmail(@Param("email") String email);
@Query(value = "SELECT * from #{#entityName} where country = ?#{[0] and city = ?#{[1]}")
List<User> searchUsersByCity(@Param("country") String country, @Param("city") String city, Pageable pageable);
@Query(value = "SELECT * from #{#entityName} where email = ?")
User searchUserByEmail(String email);
@Query(value = "SELECT * from #{#entityName} where uuidCity = ?#{
mySpELFunctionsBean.cityNameToUUID(#city)}")
List<User> searchUsersByCity(@Param("city") String city, Pageable pageable);
@Query(textQuery = true, value = "email: #{#email}")
User searchUserByEmail(@Param("email") String email);
@Query(textQuery = true, value = "#{#textToSearch}")
List<User> searchUsersByText(@Param("textToSearch") String text, Pageable pageable);
@Query(textQuery = true, value = "#{[0]}")
List<User> searchUsersByText(String textToSearch, Pageable pageable);
was:
I have it working for Spring Data 2 (2.7.6) module with some interesting improvements, but by now I don't have enough time to give it the attention it requires, full unit/integration tests..., sorry a lot. ¿maybe any of you have the time?. Thanks community!!
Code is 100% compatible with previous versions. [https://github.com/hawkore/ignite-hk/tree/master/modules/spring-data-2.0]
* Supports multiple ignite instances on same JVM (@RepositoryConfig).
* Supports query tuning parameters in {{@Query}} annotation
* Supports projections
* Supports {{Page}} and {{Stream}} responses
* Supports Sql Fields Query resultset transformation into the domain entity
* Supports named parameters ({{:myParam}}) into SQL queries, declared using {{@Param("myParam")}}
* Supports advanced parameter binding and SpEL expressions into SQL queries:
** *Template variables*:
*** {{#entityName}} - the simple class name of the domain entity
** *Method parameter expressions*: Parameters are exposed for indexed access ({{[0]}} is the first query method's param) or via the name declared using {{@Param}}. The actual SpEL expression binding is triggered by {{?#}}. Example: {{?#{[0]}}} or {{?#{#myParamName}}}
** *Advanced SpEL expressions*: While advanced parameter binding is a very useful feature, the real power of SpEL stems from the fact, that the expressions can refer to framework abstractions or other application components through SpEL EvaluationContext extension model.
* Supports SpEL expressions into Text queries ({{TextQuery}}). Examples:
{code:java}
@Query(value = "SELECT * from #{#entityName} where email = :email")
User searchUserByEmail(@Param("email") String email);
@Query(value = "SELECT * from #{#entityName} where country = ?#{[0] and city = ?#{[1]}")
List<User> searchUsersByCity(@Param("country") String country, @Param("city") String city, Pageable pageable);
@Query(value = "SELECT * from #{#entityName} where email = ?")
User searchUserByEmail(String email);
@Query(value = "SELECT * from #{#entityName} where uuidCity = ?#{
mySpELFunctionsBean.cityNameToUUID(#city)}")
List<User> searchUsersByCity(@Param("city") String city, Pageable pageable);
@Query(textQuery = true, value = "email: #{#email}")
User searchUserByEmail(@Param("email") String email);
@Query(textQuery = true, value = "#{#textToSearch}")
List<User> searchUsersByText(@Param("textToSearch") String text, Pageable pageable);
@Query(textQuery = true, value = "#{[0]}")
List<User> searchUsersByText(String textToSearch, Pageable pageable);
{code}
> Spring Data 2 - JPA Improvements and working with multiple Ignite instances on same JVM
> ---------------------------------------------------------------------------------------
>
> Key: IGNITE-13005
> URL: https://issues.apache.org/jira/browse/IGNITE-13005
> Project: Ignite
> Issue Type: Improvement
> Components: spring
> Affects Versions: 2.7.6
> Reporter: Manuel Núñez
> Assignee: Ilya Kasnacheev
> Priority: Major
>
> I have it working for Spring Data 2 (2.7.6) module with some interesting improvements, but by now I don't have enough time to give it the attention it requires, full unit/integration tests..., sorry a lot. ¿maybe any of you have the time?. Thanks community!!
> Code is 100% compatible with previous versions. [https://github.com/hawkore/ignite-hk/tree/master/modules/spring-data-2.0]
> * Supports multiple ignite instances on same JVM (@RepositoryConfig).
> * Supports query tuning parameters in {{@Query}} annotation
> * Supports projections
> * Supports {{Page}} and {{Stream}} responses
> * Supports Sql Fields Query resultset transformation into the domain entity
> * Supports named parameters ({{:myParam}}) into SQL queries, declared using {{@Param("myParam")}}
> * Supports advanced parameter binding and SpEL expressions into SQL queries:
> ** *Template variables*:
> *** {{#entityName}} - the simple class name of the domain entity
> ** *Method parameter expressions*: Parameters are exposed for indexed access ({{[0]}} is the first query method's param) or via the name declared using {{@Param}}. The actual SpEL expression binding is triggered by {{?#}}. Example: \{{?# {[0]}
> }} or {{?#
> {#myParamName}
> }}
> *
> ** *Advanced SpEL expressions*: While advanced parameter binding is a very useful feature, the real power of SpEL stems from the fact, that the expressions can refer to framework abstractions or other application components through SpEL EvaluationContext extension model.
> * Supports SpEL expressions into Text queries ({{TextQuery}}). Examples:
> @Query(value = "SELECT * from #{#entityName} where email = :email")
> User searchUserByEmail(@Param("email") String email);
> @Query(value = "SELECT * from #{#entityName} where country = ?#{[0] and city = ?#{[1]}")
> List<User> searchUsersByCity(@Param("country") String country, @Param("city") String city, Pageable pageable);
> @Query(value = "SELECT * from #{#entityName} where email = ?")
> User searchUserByEmail(String email);
> @Query(value = "SELECT * from #{#entityName} where uuidCity = ?#{
> mySpELFunctionsBean.cityNameToUUID(#city)}")
> List<User> searchUsersByCity(@Param("city") String city, Pageable pageable);
> @Query(textQuery = true, value = "email: #{#email}")
> User searchUserByEmail(@Param("email") String email);
> @Query(textQuery = true, value = "#{#textToSearch}")
> List<User> searchUsersByText(@Param("textToSearch") String text, Pageable pageable);
> @Query(textQuery = true, value = "#{[0]}")
> List<User> searchUsersByText(String textToSearch, Pageable pageable);
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)