You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ignite.apache.org by Denis Magda <dm...@apache.org> on 2017/04/12 03:26:15 UTC

Re: IGNITE-1192 Implementation (Integration with Spring Data)

Folks, good news,

The integration has been just merged into the master branch and will be released in Apache Ignite 2.0.

Eduard, thanks for tremendous work done by you especially on the side of query generator module! In general, I’ve just polished your pull request, added more tests and introduced an example:
https://github.com/apache/ignite/tree/master/examples/src/main/java/org/apache/ignite/examples/springdata

A readme.io <http://readme.io/> documentation will be ready throughout 2 nearest weeks.

—
Denis

> On Sep 1, 2016, at 1:43 AM, Eduard Shangareev <ed...@gmail.com> wrote:
> 
> Greetings, guys.
> 
> So, the current implementation was found adequate for the first version.
> But there are two issues which Semen found.
> 
> 1) now cache name is bound to a repository at compile time, could you
> please try to investigate if a more flexible binding is possible?
> 2) as I see now all spring-data integrations are hosted here -
> https://github.com/spring-projects, Could you please investigated how
> ignite integration can be added there?
> 
> First one, I don't see possibilities to provide cache names from Spring
> configuration to repository factory (except system properties).
> Second, I haven't found how to publish our spring-data implementation to
> spring-projects repository.
> 
> I will continue the investigation.
> But maybe someone already knows the answers.
> 
> 
> On Tue, Aug 9, 2016 at 2:46 PM, Eduard Shangareev <
> eduard.shangareev@gmail.com> wrote:
> 
>> Guys, I have made a pull request.
>> 
>> https://github.com/apache/ignite/pull/931
>> <https://issues.apache.org/jira/browse/IGNITE-1192#>
>> 
>> New module spring-data was added.
>> 
>> The example of repository:
>> 
>> @RepositoryConfig(cacheName = "cache")
>> public interface FirstRepository extends IgniteRepository<Person, Integer> {
>>    /** */
>>    public List<Person> findByFirstName(String val);
>> 
>>    /** */
>>    public List<Person> findByFirstNameContaining(String val);
>> 
>>    /** */
>>    public List<Person> findByFirstNameRegex(String val, Pageable pageable);
>> 
>>    /** */
>>    public Collection<Person> findTopByFirstNameContaining(String val);
>> 
>>    /** */
>>    public Iterable<Person> findFirst10ByFirstNameLike(String val);
>> 
>>    /** */
>>    public int countByFirstNameLike(String val);
>> 
>>    /** */
>>    public int countByFirstNameLikeAndSecondNameLike(String like1, String like2);
>> 
>>    /** */
>>    public int countByFirstNameStartingWithOrSecondNameStartingWith(String like1, String like2);
>> 
>>    /** */
>>    public List<Cache.Entry<Integer, Person>> findBySecondNameLike(String val);
>> 
>>    /** */
>>    public Cache.Entry<Integer, Person> findTopBySecondNameLike(String val);
>> 
>>    /** */
>>    public Person findTopBySecondNameStartingWith(String val);
>> 
>>    /** */
>>    @Query("firstName = ?")
>>    public List<Person> simpleQuery(String val);
>> 
>>    /** */
>>    @Query("firstName REGEXP ?")
>>    public List<Person> queryWithSort(String val, Sort sort);
>> 
>>    /** */
>>    @Query("SELECT * FROM Person WHERE firstName REGEXP ?")
>>    public List<Person> queryWithPageable(String val, Pageable pageable);
>> 
>>    /** */
>>    @Query("SELECT secondName FROM Person WHERE firstName REGEXP ?")
>>    public List<String> selectField(String val, Pageable pageable);
>> 
>>    /** */
>>    @Query("SELECT _key, secondName FROM Person WHERE firstName REGEXP ?")
>>    public List<List> selectSeveralField(String val, Pageable pageable);
>> 
>>    /** */
>>    @Query("SELECT count(1) FROM (SELECT DISTINCT secondName FROM Person WHERE firstName REGEXP ?)")
>>    public int countQuery(String val);
>> }
>> 
>> 
>> A user should extend IgniteRepository and provide cache name via
>> @RepositoryConfig.
>> 
>> IgniteRepository extends CrudRepository and deprecates unsupported
>> operation (without id).
>> 
>> 
>> 
>> 
>> 
>> On Tue, Aug 9, 2016 at 12:06 AM, Valentin Kulichenko <
>> valentin.kulichenko@gmail.com> wrote:
>> 
>>> Eduard,
>>> 
>>> It's up to you :) I'm just saying that we should split the big task into
>>> smaller ones.
>>> 
>>> -Val
>>> 
>>> On Mon, Aug 8, 2016 at 3:57 AM, Eduard Shangareev <
>>> eduard.shangareev@gmail.com> wrote:
>>> 
>>>> Hi, Valentin.
>>>> I am going to close these ticket with some prototype and create new ones
>>>> (maybe, with umbrella one).
>>>> 
>>>> Will it work?
>>>> 
>>>> On Sat, Aug 6, 2016 at 8:03 AM, Valentin Kulichenko <
>>>> valentin.kulichenko@gmail.com> wrote:
>>>> 
>>>>> Hi Eduard,
>>>>> 
>>>>> This is too much information :)
>>>>> 
>>>>> I think you should create separate tickets for different aspects of
>>>> Spring
>>>>> Data integration and use IGNITE-1192 only as an umbrella, because
>>>> otherwise
>>>>> it will be flooded by comments. This will allow to implement this
>>>>> functionality step by step and track the progress better.
>>>>> 
>>>>> Agree?
>>>>> 
>>>>> -Val
>>>>> 
>>>>> On Fri, Aug 5, 2016 at 4:17 AM, Eduard Shangareev <
>>>>> eduard.shangareev@gmail.com> wrote:
>>>>> 
>>>>>> So there is no async support for query, therefore we can't support
>>>>> futures
>>>>>> as return type (paragraph 2).
>>>>>> 
>>>>>> On Thu, Aug 4, 2016 at 6:08 PM, Eduard Shangareev <
>>>>>> eduard.shangareev@gmail.com> wrote:
>>>>>> 
>>>>>>> I have looked at Querydsl and QbE and I think their support
>>> should be
>>>>>>> postponed.
>>>>>>> 
>>>>>> 
>>>>> 
>>>> 
>>> 
>> 
>>