<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Nicolas Dos Santos</title>
    <description>The latest articles on Forem by Nicolas Dos Santos (@kobee1203).</description>
    <link>https://forem.com/kobee1203</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F508265%2F9f62619e-05a3-4f85-9b93-a1901c0d318a.jpeg</url>
      <title>Forem: Nicolas Dos Santos</title>
      <link>https://forem.com/kobee1203</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/kobee1203"/>
    <language>en</language>
    <item>
      <title>schema-org-java 0.4.0 released - Java library for working with Schema.org data in JSON-LD format</title>
      <dc:creator>Nicolas Dos Santos</dc:creator>
      <pubDate>Sun, 12 Feb 2023 21:32:27 +0000</pubDate>
      <link>https://forem.com/kobee1203/schema-org-java-040-released-java-library-for-working-with-schemaorg-data-in-json-ld-format-50m6</link>
      <guid>https://forem.com/kobee1203/schema-org-java-040-released-java-library-for-working-with-schemaorg-data-in-json-ld-format-50m6</guid>
      <description>&lt;p&gt;If you've ever worked with structured data, you're probably familiar with &lt;a href="http://schema.org" rel="noopener noreferrer"&gt;Schema.org&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;And you must have realized that entities contain a lot of information and that inheritance can be complex.&lt;/p&gt;

&lt;p&gt;So it can be tedious to create all the entities needed for your project and then serialize / deserialize the data in &lt;a href="https://json-ld.org/" rel="noopener noreferrer"&gt;JSON-LD&lt;/a&gt; format.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Kobee1203/schema-org-java" rel="noopener noreferrer"&gt;schema-org-java&lt;/a&gt; is a library to work with Schema.org entities.&lt;/p&gt;

&lt;p&gt;The entities can be easily generated with the Maven plugin, and can then be serialized / deserialized to JSON-LD format with the serializer module.&lt;/p&gt;

&lt;p&gt;The library has the following features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fully supports the vocabulary defined in the &lt;a href="http://schema.org" rel="noopener noreferrer"&gt;http://schema.org&lt;/a&gt; namespace.&lt;/li&gt;
&lt;li&gt;Fully supports type multiple inheritance, multiple values per property in &lt;a href="http://schema.org" rel="noopener noreferrer"&gt;http://schema.org&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Every Schema.org type has a corresponding Java interface which provides convenient getter/setter methods for getting/setting the values of the properties of that particular type.&lt;/li&gt;
&lt;li&gt;Supports the generation of all Schema.org types at once, or specific ones.&lt;/li&gt;
&lt;li&gt;Fully supports Schema.org documentation of types and properties by adding Javadoc on generated classes and methods.&lt;/li&gt;
&lt;li&gt;Supports different versions of the Schema.org vocabulary.&lt;/li&gt;
&lt;li&gt;Supports serializing and deserializing Schema.org objects to and from JSON-LD formats.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here is a video illustrating the generation and creation of Schema.org entities:&lt;br&gt;
&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;a href="https://user-images.githubusercontent.com/1423193/218336603-4cb1bc82-0daa-4187-9c34-72e206bccfe9.mp4" rel="noopener noreferrer"&gt;
      user-images.githubusercontent.com
    &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;If you are interested, please take a look and give me your feedback :)&lt;/p&gt;

</description>
      <category>a11y</category>
      <category>html</category>
      <category>webdev</category>
    </item>
    <item>
      <title>schema-org-java: Java library for working with Schema.org data in JSON-LD format</title>
      <dc:creator>Nicolas Dos Santos</dc:creator>
      <pubDate>Mon, 21 Nov 2022 21:49:19 +0000</pubDate>
      <link>https://forem.com/kobee1203/schema-org-java-java-library-for-working-with-schemaorg-data-in-json-ld-format-5dg3</link>
      <guid>https://forem.com/kobee1203/schema-org-java-java-library-for-working-with-schemaorg-data-in-json-ld-format-5dg3</guid>
      <description>&lt;p&gt;If you've ever worked with structured data, you're probably familiar with &lt;a href="http://schema.org"&gt;Schema.org&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;And you must have realized that entities contain a lot of information and that inheritance can be complex.&lt;/p&gt;

&lt;p&gt;So it can be tedious to create all the entities needed for your project and then serialize / deserialize the data in &lt;a href="https://json-ld.org/"&gt;JSON-LD&lt;/a&gt; format.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Kobee1203/schema-org-java"&gt;schema-org-java&lt;/a&gt; is a library to work with Schema.org entities.&lt;/p&gt;

&lt;p&gt;The entities can be easily generated with the Maven plugin, and can then be serialized / deserialized (soon) to JSON-LD format with the serializer module.&lt;/p&gt;

&lt;p&gt;The library has the following features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fully supports the vocabulary defined in the &lt;a href="http://schema.org"&gt;http://schema.org&lt;/a&gt; namespace.&lt;/li&gt;
&lt;li&gt;Fully supports type multiple inheritance, multiple values per property in &lt;a href="http://schema.org"&gt;http://schema.org&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Every Schema.org type has a corresponding Java interface which provides convenient getter/setter methods for getting/setting the values of the properties of that particular type.&lt;/li&gt;
&lt;li&gt;Supports the generation of all Schema.org types at once, or specific ones.&lt;/li&gt;
&lt;li&gt;Fully supports Schema.org documentation of types and properties by adding Javadoc on generated classes and methods.&lt;/li&gt;
&lt;li&gt;Supports different versions of the Schema.org vocabulary.&lt;/li&gt;
&lt;li&gt;Supports serializing and deserializing (soon) Schema.org objects to and from JSON-LD formats.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here is a video illustrating the generation and creation of Schema.org entities:&lt;br&gt;
&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;a href="https://user-images.githubusercontent.com/1423193/199852384-e41869fb-beae-4106-be0f-1482393b9e0c.mp4" rel="noopener noreferrer"&gt;
      user-images.githubusercontent.com
    &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;Several features are not yet developed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deserialization&lt;/li&gt;
&lt;li&gt;Adding methods to set the data of the fields in list&lt;/li&gt;
&lt;li&gt;Added javadoc on setter methods&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are interested, please take a look and give me your feedback :)&lt;/p&gt;

</description>
      <category>java</category>
      <category>schemaorg</category>
      <category>maven</category>
      <category>programming</category>
    </item>
    <item>
      <title>Weedow Searchy 0.1.0 released</title>
      <dc:creator>Nicolas Dos Santos</dc:creator>
      <pubDate>Tue, 23 Feb 2021 10:24:58 +0000</pubDate>
      <link>https://forem.com/kobee1203/weedow-searchy-0-1-0-released-4cn7</link>
      <guid>https://forem.com/kobee1203/weedow-searchy-0-1-0-released-4cn7</guid>
      <description>&lt;p&gt;I'm happy to share with you the release 0.1.0 of &lt;a href="https://github.com/Kobee1203/weedow-searchy"&gt;Weedow Searchy&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Searchy is a Spring-based library that allows to automatically expose endpoints in order to search for data related to Entities, whatever the database used.&lt;/p&gt;

&lt;p&gt;Searchy provides an advanced search engine that does not require the creation of Repositories with custom methods needed to search on different fields of Entities.&lt;/p&gt;

&lt;p&gt;We can search on any field, combine multiple criteria to refine the search, and even search on nested fields.&lt;/p&gt;

&lt;p&gt;It supports the following data access layers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Kobee1203/weedow-searchy/blob/dev/jpa"&gt;JPA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Kobee1203/weedow-searchy/blob/dev/mongodb"&gt;MongoDB&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--k2n1uBha--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0sjiqesh9seuu6dij3s5.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k2n1uBha--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0sjiqesh9seuu6dij3s5.gif" alt="query"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Examples of queries&lt;/em&gt;:&lt;/p&gt;

&lt;p&gt;GET /search/person&lt;/p&gt;

&lt;p&gt;GET /search/person?&lt;code&gt;firstName=John&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;GET /search/person?&lt;code&gt;address.zipCode=78370&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;GET /search/person?query=&lt;code&gt;firstName='John' AND lastName='Doe'&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;GET /search/person?query=&lt;code&gt;birthday != '1981-03-12T10:36:00'&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;GET /search/person?query=&lt;code&gt;NOT(firstName='John' OR firstName='Jane')&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;GET /search/person?query=&lt;code&gt;address.street IMATCHES 'RUE*' AND (vehicles.brand='Renault' OR vehicles.brand='Porsche') AND job.active = true AND (job.salary &amp;gt;=50000 AND job.salary&amp;lt;610000) AND characteristics.key = 'hair' AND vehicles.features.value.description IMATCHES '*Navigation Services*'&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;There is a &lt;a href="https://github.com/Kobee1203/weedow-searchy#getting-started-in-5-minutes"&gt;"Getting Started"&lt;/a&gt; section that describes step by step the creation of an application with the library.&lt;/p&gt;

&lt;p&gt;Searchy provides several features described in the documentation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DTO Mappers&lt;/li&gt;
&lt;li&gt;Validators&lt;/li&gt;
&lt;li&gt;Entity joins handling&lt;/li&gt;
&lt;li&gt;Converters&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>kotlin</category>
      <category>java</category>
      <category>webdev</category>
      <category>spring</category>
    </item>
    <item>
      <title>Spring Data Search 2.0.0 released</title>
      <dc:creator>Nicolas Dos Santos</dc:creator>
      <pubDate>Tue, 05 Jan 2021 12:21:18 +0000</pubDate>
      <link>https://forem.com/kobee1203/spring-data-search-2-0-0-released-3md4</link>
      <guid>https://forem.com/kobee1203/spring-data-search-2-0-0-released-3md4</guid>
      <description>&lt;p&gt;I'm happy to share with you the release &lt;strong&gt;2.0.0&lt;/strong&gt; of &lt;a href="https://github.com/Kobee1203/spring-data-search"&gt;Spring Data Search&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This library allows to automatically expose endpoints in order to search for data related to Entities.&lt;/p&gt;

&lt;p&gt;It provides an advanced search engine that can search on any Entity field, combine multiple criteria to refine the search, and even search on nested Entity fields.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vJ70wriM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Kobee1203"&gt;
        Kobee1203
      &lt;/a&gt; / &lt;a href="https://github.com/Kobee1203/spring-data-search"&gt;
        spring-data-search
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Automatically exposes Entity endpoints to search for data using a powerful query language
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;There are some new features, and some fixed bugs.&lt;br&gt;
But above all there was a core refactoring to support different data access layers (JPA, MongoDB, ...).&lt;br&gt;
Currently, there is only &lt;strong&gt;JPA&lt;/strong&gt; supported (which was already supported by previous versions). But the next step is to add support to &lt;strong&gt;MongoDB&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This refactoring required some modifications in the APIs.&lt;br&gt;
There is a page describing how to &lt;a href="https://github.com/Kobee1203/spring-data-search/blob/master/docs/migration/migrating-from-1.x-to-2.x.md"&gt;migrate from 1.x to 2.x&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9AjIt4wH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://github.com/Kobee1203/spring-data-search/raw/master/docs/images/query.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9AjIt4wH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://github.com/Kobee1203/spring-data-search/raw/master/docs/images/query.gif" alt="Query GIF"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Whats's new:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Allow special keywords to be used as query values:

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;CURRENT_DATE&lt;/em&gt;: keyword representing the current date. Similar to the &lt;code&gt;current_date()&lt;/code&gt; function in SQL.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;CURRENT_TIME&lt;/em&gt;: keyword representing the current time. Similar to the &lt;code&gt;current_time()&lt;/code&gt; function in SQL&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;CURRENT_DATE_TIME&lt;/em&gt;: keyword representing the current date time. Similar to the &lt;code&gt;current_timestamp()&lt;/code&gt; function in SQL&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Application property &lt;code&gt;spring.data.search.default-alias-resolver.field-suffixes&lt;/code&gt;: Comma-separated list of field suffixes to be removed in order to create a field's alias from the &lt;code&gt;com.weedow.spring.data.search.config.DefaultAliasResolver&lt;/code&gt;. Default value is &lt;code&gt;Entity,Entities&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Improved search on fields of &lt;code&gt;Map&lt;/code&gt; type: You can use the special keys &lt;code&gt;key&lt;/code&gt; or &lt;code&gt;value&lt;/code&gt; to query the keys or values respectively. And now, you can query on the nested fields of the Objects representing by &lt;code&gt;key&lt;/code&gt; or &lt;code&gt;value&lt;/code&gt;

&lt;ul&gt;
&lt;li&gt;/search/person?&lt;code&gt;tasks.key.name=shopping&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;/search/person?&lt;code&gt;vehicles.features.value.name=gps&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are interested and want to know more, please go to the &lt;a href="https://github.com/Kobee1203/spring-data-search#spring-data-search"&gt;project page&lt;/a&gt; where you will find all the details.&lt;/p&gt;

</description>
      <category>kotlin</category>
      <category>java</category>
      <category>github</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Spring Data Search 1.0.1 released</title>
      <dc:creator>Nicolas Dos Santos</dc:creator>
      <pubDate>Wed, 04 Nov 2020 21:35:38 +0000</pubDate>
      <link>https://forem.com/kobee1203/spring-data-search-1-0-1-released-4de0</link>
      <guid>https://forem.com/kobee1203/spring-data-search-1-0-1-released-4de0</guid>
      <description>&lt;p&gt;I'm happy to share with you the release &lt;strong&gt;1.0.1&lt;/strong&gt; of &lt;a href="https://github.com/Kobee1203/spring-data-search"&gt;Spring Data Search&lt;/a&gt;.&lt;br&gt;
This library allows to automatically expose endpoints to search for data using a powerful query language.&lt;/p&gt;

&lt;p&gt;What's New:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Changing the base path&lt;/li&gt;
&lt;li&gt;Handle Map type fields on Entities&lt;/li&gt;
&lt;li&gt;Support for Reactive application&lt;/li&gt;
&lt;li&gt;2 new sample applications added in Java and in Spring WebFlux, available in the distribution zip&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vJ70wriM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Kobee1203"&gt;
        Kobee1203
      &lt;/a&gt; / &lt;a href="https://github.com/Kobee1203/spring-data-search"&gt;
        spring-data-search
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Automatically exposes endpoints to search for data using a powerful query language
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;If you don't know this library, let me briefly explain its purpose and how to set it up in 5 minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  About
&lt;/h2&gt;

&lt;p&gt;Spring Data Search allows to automatically expose endpoints in order to search for data related to JPA entities.&lt;/p&gt;

&lt;p&gt;Spring Data Search provides an advanced search engine that does not require the creation of JPA repositories with custom methods needed to search on different fields of JPA entities.&lt;/p&gt;

&lt;p&gt;We can search on any field, combine multiple criteria to refine the search, and even search on nested fields. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9AjIt4wH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://github.com/Kobee1203/spring-data-search/raw/master/docs/images/query.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9AjIt4wH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://github.com/Kobee1203/spring-data-search/raw/master/docs/images/query.gif" alt="Query GIF"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why use Spring Data Search?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://spring.io/projects/spring-data-rest"&gt;Spring Data Rest&lt;/a&gt; builds on top of the Spring Data repositories and automatically exports those as REST resources. &lt;/p&gt;

&lt;p&gt;However, when we want to search for JPA entities according to different criteria, we need to define several methods in the Repositories to perform different searches.&lt;/p&gt;

&lt;p&gt;Moreover, by default REST endpoints return JPA Entities content directly to the client, without mapping with a dedicated DTO class.&lt;br&gt;
We can use Projections on Repositories, but this means that from the architecture level, we strongly associate the infrastructure layer with the application layer.&lt;/p&gt;

&lt;p&gt;Spring Data Search allows to easily expose an endpoint for a JPA entity and thus be able to search on any fields of this entity, to combine several criteria and even search on fields belonging to sub-entities.&lt;/p&gt;

&lt;p&gt;Let's say you manage Persons associated with Addresses, Vehicles and a Job.&lt;br&gt;
You want to allow customers to search for them, regardless of the search criteria:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search for Persons whose first name is "John" or "Jane"&lt;/li&gt;
&lt;li&gt;Search for Persons whose company where they work is "Acme", and own a car or a motorbike &lt;/li&gt;
&lt;li&gt;Search for Persons who live in London&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You could create a Repository with custom methods to perform all these searches, and you could add new custom methods according to the needs.&lt;/p&gt;

&lt;p&gt;Alternatively, you can use Spring Data Search which allows you to perform all these searches with a minimum configuration, without the need of a custom Repository. If you want to do other different searches, you do not need to add new methods to do that.&lt;/p&gt;
&lt;h2&gt;
  
  
  Getting Started in 5 minutes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Go to &lt;a href="https://start.spring.io/"&gt;https://start.spring.io/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Generate a new Java project &lt;code&gt;sample-app-java&lt;/code&gt; with the following dependencies:

&lt;ul&gt;
&lt;li&gt;Spring Web&lt;/li&gt;
&lt;li&gt;Spring Data JPA&lt;/li&gt;
&lt;li&gt;H2 Database
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2Jl9jtr6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/Kobee1203/spring-data-search/raw/master/docs/images/start.spring.io.png" alt="start.spring.io"&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Update the generated project by adding the dependency of Spring Data Search:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For &lt;a href="https://maven.apache.org/"&gt;Maven&lt;/a&gt; project, add the dependency in the &lt;code&gt;pom.xml&lt;/code&gt; file:
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;com.weedow&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;spring-data-search&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;1.0.1&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;


&lt;ul&gt;
&lt;li&gt;For &lt;a href="https://gradle.org/"&gt;Gradle&lt;/a&gt; project, add the dependency in the &lt;code&gt;build.gradle&lt;/code&gt; file:
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="highlight groovy"&gt;&lt;code&gt;&lt;span class="n"&gt;implementation&lt;/span&gt; &lt;span class="s2"&gt;"com.weedow:spring-data-search:1.0.1"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create a new file &lt;code&gt;Person.java&lt;/code&gt; to add a new JPA Entity &lt;code&gt;Person&lt;/code&gt; with the following content:&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;javax.persistence.*&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.time.LocalDateTime&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.util.Set&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="nd"&gt;@Entity&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Person&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="nd"&gt;@Id&lt;/span&gt;
    &lt;span class="nd"&gt;@GeneratedValue&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;Long&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="nd"&gt;@Column&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nullable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;firstName&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="nd"&gt;@Column&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nullable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;lastName&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="nd"&gt;@Column&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;unique&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;length&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="nd"&gt;@Column&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;LocalDateTime&lt;/span&gt; &lt;span class="n"&gt;birthday&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="nd"&gt;@Column&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;Double&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="nd"&gt;@Column&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;Double&lt;/span&gt; &lt;span class="n"&gt;weight&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="nd"&gt;@ElementCollection&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fetch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;FetchType&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;EAGER&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;Set&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;nickNames&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="nd"&gt;@ElementCollection&lt;/span&gt;
    &lt;span class="nd"&gt;@CollectionTable&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"person_phone_numbers"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;joinColumns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="nd"&gt;@JoinColumn&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"person_id"&lt;/span&gt;&lt;span class="o"&gt;)})&lt;/span&gt;
    &lt;span class="nd"&gt;@Column&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"phone_number"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;Set&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;phoneNumbers&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;Long&lt;/span&gt; &lt;span class="nf"&gt;getId&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;Person&lt;/span&gt; &lt;span class="nf"&gt;setId&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Long&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;getFirstName&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;firstName&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;getLastName&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;lastName&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;getEmail&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;LocalDateTime&lt;/span&gt; &lt;span class="nf"&gt;getBirthday&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;birthday&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;Double&lt;/span&gt; &lt;span class="nf"&gt;getHeight&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;Double&lt;/span&gt; &lt;span class="nf"&gt;getWeight&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;weight&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;Set&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;getNickNames&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;nickNames&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;Person&lt;/span&gt; &lt;span class="nf"&gt;setNickNames&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Set&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;nickNames&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nickNames&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nickNames&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;Set&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;getPhoneNumbers&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;phoneNumbers&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;Person&lt;/span&gt; &lt;span class="nf"&gt;setPhoneNumbers&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Set&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;phoneNumbers&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;phoneNumbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;phoneNumbers&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;boolean&lt;/span&gt; &lt;span class="nf"&gt;equals&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Object&lt;/span&gt; &lt;span class="n"&gt;object&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;object&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;object&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;getClass&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;object&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getClass&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(!&lt;/span&gt;&lt;span class="kd"&gt;super&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;equals&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;object&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;

        &lt;span class="nc"&gt;Person&lt;/span&gt; &lt;span class="n"&gt;person&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Person&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="n"&gt;object&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(!&lt;/span&gt;&lt;span class="n"&gt;firstName&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;equals&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;firstName&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(!&lt;/span&gt;&lt;span class="n"&gt;lastName&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;equals&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;lastName&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;hashCode&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;super&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;hashCode&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;31&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;firstName&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;hashCode&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;31&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;lastName&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;hashCode&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;Add the following Configuration class to add a new &lt;code&gt;SearchDescriptor&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;com.example.sampleappjava.entity.Person&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;com.weedow.spring.data.search.config.SearchConfigurer&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;com.weedow.spring.data.search.descriptor.SearchDescriptor&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;com.weedow.spring.data.search.descriptor.SearchDescriptorBuilder&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;com.weedow.spring.data.search.descriptor.SearchDescriptorRegistry&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.springframework.context.annotation.Configuration&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="nd"&gt;@Configuration&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SampleAppJavaConfiguration&lt;/span&gt; &lt;span class="kd"&gt;implements&lt;/span&gt; &lt;span class="nc"&gt;SearchConfigurer&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="nd"&gt;@Override&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;addSearchDescriptors&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;SearchDescriptorRegistry&lt;/span&gt; &lt;span class="n"&gt;registry&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;registry&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addSearchDescriptor&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;personSearchDescriptor&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;SearchDescriptor&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Person&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;personSearchDescriptor&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;SearchDescriptorBuilder&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Person&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="nc"&gt;Person&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a new file &lt;code&gt;data.sql&lt;/code&gt; in &lt;code&gt;/src/main/resources&lt;/code&gt;, and add the following content:&lt;br&gt;&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;  &lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;PERSON&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;first_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;last_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;birthday&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="k"&gt;VALUES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'John'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Doe'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'john.doe@acme.com'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'1981-03-12 10:36:00'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;174&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;70&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;PERSON&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;first_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;last_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;birthday&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="k"&gt;VALUES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Jane'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Doe'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'jane.doe@acme.com'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'1981-11-26 12:30:00'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;165&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;68&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;PERSON_PHONE_NUMBERS&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;person_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;phone_number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;VALUES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'+33612345678'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;PERSON_PHONE_NUMBERS&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;person_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;phone_number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;VALUES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'+33687654321'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;PERSON_NICK_NAMES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;person_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nick_names&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;VALUES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Johnny'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;PERSON_NICK_NAMES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;person_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nick_names&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;VALUES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Joe'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Run the application:

&lt;ul&gt;
&lt;li&gt;For Maven Project: &lt;code&gt;./mvnw spring-boot:run&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;For Gradle Project: &lt;code&gt;./gradlew bootRun&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;From your IDE: Run the Main Class &lt;code&gt;com.example.sampleappjava.SampleAppJavaApplication&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Open your browser and go to the URL &lt;code&gt;&lt;a href="http://localhost:8080/search/person"&gt;http://localhost:8080/search/person&lt;/a&gt;&lt;/code&gt;
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Lqbujfh0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/Kobee1203/spring-data-search/raw/master/docs/images/find-all-persons.png" alt="find-all-persons"&gt;
&lt;/li&gt;
&lt;li&gt;You can filter the results by adding query parameters representing the JPA Entity fields.
Here is an example where the results are filtered by the first name:
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--n09xmE6Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/Kobee1203/spring-data-search/raw/master/docs/images/find-person-by-firstname.png" alt="find-person-by-firstname"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can also filter using the &lt;a href="https://github.com/Kobee1203/spring-data-search#advanced-query"&gt;Advanced Query&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you are interested and want to know more, please go to the &lt;a href="https://github.com/Kobee1203/spring-data-search#spring-data-search"&gt;project page&lt;/a&gt; where you will find all the details.&lt;/p&gt;

</description>
      <category>kotlin</category>
      <category>spring</category>
      <category>java</category>
      <category>github</category>
    </item>
  </channel>
</rss>
