{"id":106686,"date":"2020-09-05T15:15:00","date_gmt":"2020-09-05T12:15:00","guid":{"rendered":"https:\/\/www.javacodegeeks.com\/?p=106686"},"modified":"2020-09-02T16:18:36","modified_gmt":"2020-09-02T13:18:36","slug":"spring-boot-data-jpa-query-for-nested-object","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2020\/09\/spring-boot-data-jpa-query-for-nested-object.html","title":{"rendered":"Spring boot data JPA &#8211; Query for nested object"},"content":{"rendered":"<p>Nowadays spring boot and spring data are widely used frameworks. If you are building web application in java, spring boot is the first choice. If you have Database then spring data JPA is best choice. In spring boot spring data is the default implementation for database interaction. Spring boot using spring data JPA even creates nested object query from method name.<\/p>\n<p>Therefore, if you are using spring boot or spring data JPA, you must know how queries are created specially if you have nested object structure.&nbsp;<\/p>\n<h2 class=\"wp-block-heading\">Introduction<\/h2>\n<p>Spring data JPA provides repository abstraction and&nbsp;reduces the boiler plate code from persistence layers.&nbsp;As discussed in our previous blog <a href=\"https:\/\/stacktraceguru.com\/springboot\/spring-data-jpa\">Spring data Java beginner<\/a>, we can define queries in two ways, Query annotation and Method name itself.<\/p>\n<p>For simple use cases method name for query resolution is best option. However,&nbsp;using spring boot for nested object property without knowing how it works, could cause big issue at runtime.<\/p>\n<p>Lets understand what could be the problem in nested object query and how can we resolve it.<\/p>\n<h2 class=\"wp-block-heading\">Problem statement<\/h2>\n<p>For example if you create method&nbsp;findByDepartmentId, what will be the query? It would be either,<\/p>\n<div>\n<div id=\"highlighter_563716\" class=\"syntaxhighlighter  c\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"c plain\">Select * from ClassRoom where departmentId=?<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>OR<\/p>\n<div>\n<div id=\"highlighter_934155\" class=\"syntaxhighlighter  c\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"c plain\">Select * from ClassRoom c left join department d on &lt;condition&gt; where d.id =?<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Both are the possibilities depending on the class structure like<\/p>\n<div>\n<div id=\"highlighter_975418\" class=\"syntaxhighlighter  c\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"c plain\">Class ClassRoom {<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"c spaces\">&nbsp;&nbsp;&nbsp;<\/code><code class=\"c plain\">Long departmentId;<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"c plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Or<\/p>\n<div>\n<div id=\"highlighter_927129\" class=\"syntaxhighlighter  c\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"c plain\">Class ClassRoom {<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"c spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"c plain\">Department department;<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"c plain\">}<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"c plain\">Class Department {<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"c spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"c plain\">Long id;<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"c plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Then the big question is, what happens when we have following structure?<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<div>\n<div id=\"highlighter_79312\" class=\"syntaxhighlighter  c\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"c plain\">Class ClassRoom {<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"c spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"c plain\">Department department;<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"c spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"c plain\">Long departmentId;<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"c plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<div>\n<div id=\"highlighter_841427\" class=\"syntaxhighlighter  c\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"c plain\">Class ClassRoom {<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"c spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"c plain\">Department department;<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"c spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"c plain\">Long departmentId;<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"c plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h2 class=\"wp-block-heading\">How spring data resolves method name<\/h2>\n<p>Let\u2019s see how spring data&nbsp;jpa&nbsp;in spring boot decides what join should be used to avoid wrong select query.<\/p>\n<p>Consider the object structure as below for these classes : Student- classroom-department<\/p>\n<div>\n<div id=\"highlighter_96392\" class=\"syntaxhighlighter  c\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">01<\/div>\n<div class=\"line number2 index1 alt1\">02<\/div>\n<div class=\"line number3 index2 alt2\">03<\/div>\n<div class=\"line number4 index3 alt1\">04<\/div>\n<div class=\"line number5 index4 alt2\">05<\/div>\n<div class=\"line number6 index5 alt1\">06<\/div>\n<div class=\"line number7 index6 alt2\">07<\/div>\n<div class=\"line number8 index7 alt1\">08<\/div>\n<div class=\"line number9 index8 alt2\">09<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"c plain\">Class Student {<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"c spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"c plain\">...<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"c spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"c plain\">ClassRoom classRoom;<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"c plain\">}<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"c plain\">Class ClassRoom {<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"c spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"c plain\">\u2026..<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"c spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"c plain\">Department department;<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"c plain\">}<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"c plain\">Class Department{<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"c spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"c plain\">...<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"c spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"c plain\">Long id;<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"c plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>We will be using above database structure&nbsp;and try to understand what happens when we&nbsp;create a method<strong>&nbsp;findByClassRoomDepartmentId(Long id)<\/strong><\/p>\n<p>Following are the steps that spring data&nbsp;jpa&nbsp;will perform to create query<\/p>\n<ul class=\"wp-block-list\">\n<li>Start by taking complete name as\u00a0<strong>classRoomDepartmentId<\/strong>\u00a0under the domain class<\/li>\n<li>If this\u00a0doesnot\u00a0match split word at camel case part form right side into 2 parts as\u00a0<strong>classRoomDepartment<\/strong>\u00a0and <strong>id<\/strong>\n<ul>\n<li>Check whether first property matches, take that property and continue for second part- keep building tree<\/li>\n<li>If first side does not match, continue to split to next point i.e.\u00a0<strong>classRoom<\/strong> and <strong>departmentId<\/strong> <\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" width=\"800\" height=\"330\" src=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/09\/Query-resolution-flow.png\" alt=\"\" class=\"wp-image-106708\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/09\/Query-resolution-flow.png 800w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/09\/Query-resolution-flow-300x124.png 300w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/09\/Query-resolution-flow-768x317.png 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><figcaption>Method name to property resolution flow diagram<\/figcaption><\/figure>\n<\/div>\n<p>In most of the cases this works, however this could fail if we have Long&nbsp;classRoomDepartment&nbsp;variable in Student class. JPA will find the first match as&nbsp;classRoomDepartment, it will select and fail because it will try to find id variable inside the&nbsp;classRoomDepartment&nbsp;which is&nbsp;Long class. But as there is no id property inside the Long class and it will fail.<\/p>\n<h2 class=\"wp-block-heading\">Solution:<\/h2>\n<p>To solve such problem, we can <strong>use \u2018_\u2019 (Underscore) character inside the method name<\/strong> to define where&nbsp;JPA&nbsp;should try to split. In this case our method name will be<em>&nbsp;findByClassRoom_DepartmentId()<\/em><\/p>\n<p>Using underscore is not in the java naming best practice, but this is allowed in spring data JPA.<\/p>\n<h3 class=\"wp-block-heading\">Fast track reading<\/h3>\n<ul class=\"wp-block-list\">\n<li>In Spring data Java queries can be defined using Query annotation or Method name<\/li>\n<li>For simple cases derived query from method name is best choice<\/li>\n<li>We can <a href=\"https:\/\/stacktraceguru.com\/springboot\/nested-object-query#query-resolution-from-method-bane\">use method name to derive query for nested object <\/a>also<\/li>\n<li>Spring data jpa starts checking for property from full name and starts breaking at camel case from right to left<\/li>\n<li>To avoid the property name confusion \u2018_\u2019 (Underscore) character can be used to separate property names<\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">Related topics<\/h3>\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/docs.spring.io\/spring-data\/jpa\/docs\/2.3.0.RELEASE\/reference\/html\/#project\">Spring data website<\/a><\/li>\n<li><a href=\"https:\/\/stacktraceguru.com\/springboot\/spring-data-jpa\">Beginner tutorial for Spring data Java<\/a><\/li>\n<li><a href=\"https:\/\/stacktraceguru.com\/springboot\/custom-banner\">Spring boot custom banner generation<\/a><\/li>\n<li><a href=\"https:\/\/spring.io\/guides\/gs\/spring-boot\/\">Spring boot project setup guide<\/a><\/li>\n<\/ul>\n<div class=\"attribution\">\n<table>\n<tbody>\n<tr>\n<td>\n<p>Published on Java Code Geeks with permission by Stacktraceguru, partner at our <a href=\"\/\/www.javacodegeeks.com\/join-us\/jcg\/\" target=\"_blank\" rel=\"noopener noreferrer\">JCG program<\/a>. See the original article here: <a href=\"https:\/\/stacktraceguru.com\/springboot\/nested-object-query\" target=\"_blank\" rel=\"noopener noreferrer\">Spring boot data jpa-Query for nested object<\/a><\/p>\n<p>Opinions expressed by Java Code Geeks contributors are their own.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Nowadays spring boot and spring data are widely used frameworks. If you are building web application in java, spring boot is the first choice. If you have Database then spring data JPA is best choice. In spring boot spring data is the default implementation for database interaction. Spring boot using spring data JPA even creates &hellip;<\/p>\n","protected":false},"author":116473,"featured_media":240,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[2017,33,854],"class_list":["post-106686","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-enterprise-java","tag-data","tag-jpa","tag-spring-boot"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Spring boot data JPA - Query for nested object - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"Nowadays spring boot and spring data are widely used frameworks. If you are building web application in java, spring boot is the first choice. If you have\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.javacodegeeks.com\/2020\/09\/spring-boot-data-jpa-query-for-nested-object.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Spring boot data JPA - Query for nested object - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"Nowadays spring boot and spring data are widely used frameworks. If you are building web application in java, spring boot is the first choice. If you have\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2020\/09\/spring-boot-data-jpa-query-for-nested-object.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:author\" content=\"www.facebook.com\/Stacktraceguru\/\" \/>\n<meta property=\"article:published_time\" content=\"2020-09-05T12:15:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Stacktraceguru\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Stacktraceguru\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/09\\\/spring-boot-data-jpa-query-for-nested-object.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/09\\\/spring-boot-data-jpa-query-for-nested-object.html\"},\"author\":{\"name\":\"Stacktraceguru\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/08690a509ef2e0bc8bc98ddc16bb291d\"},\"headline\":\"Spring boot data JPA &#8211; Query for nested object\",\"datePublished\":\"2020-09-05T12:15:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/09\\\/spring-boot-data-jpa-query-for-nested-object.html\"},\"wordCount\":632,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/09\\\/spring-boot-data-jpa-query-for-nested-object.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/spring-logo.jpg\",\"keywords\":[\"data\",\"JPA\",\"Spring Boot\"],\"articleSection\":[\"Enterprise Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/09\\\/spring-boot-data-jpa-query-for-nested-object.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/09\\\/spring-boot-data-jpa-query-for-nested-object.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/09\\\/spring-boot-data-jpa-query-for-nested-object.html\",\"name\":\"Spring boot data JPA - Query for nested object - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/09\\\/spring-boot-data-jpa-query-for-nested-object.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/09\\\/spring-boot-data-jpa-query-for-nested-object.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/spring-logo.jpg\",\"datePublished\":\"2020-09-05T12:15:00+00:00\",\"description\":\"Nowadays spring boot and spring data are widely used frameworks. If you are building web application in java, spring boot is the first choice. If you have\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/09\\\/spring-boot-data-jpa-query-for-nested-object.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/09\\\/spring-boot-data-jpa-query-for-nested-object.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/09\\\/spring-boot-data-jpa-query-for-nested-object.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/spring-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/spring-logo.jpg\",\"width\":150,\"height\":150,\"caption\":\"spring-interview-questions-answers\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/09\\\/spring-boot-data-jpa-query-for-nested-object.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Enterprise Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\\\/enterprise-java\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Spring boot data JPA &#8211; Query for nested object\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/08690a509ef2e0bc8bc98ddc16bb291d\",\"name\":\"Stacktraceguru\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/edc9a2f27fb2b63b35c4c626a71614ab39a609abb0ad59d73cfb2fa094d3ac4f?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/edc9a2f27fb2b63b35c4c626a71614ab39a609abb0ad59d73cfb2fa094d3ac4f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/edc9a2f27fb2b63b35c4c626a71614ab39a609abb0ad59d73cfb2fa094d3ac4f?s=96&d=mm&r=g\",\"caption\":\"Stacktraceguru\"},\"description\":\"Stacktraceguru is an educational website. This website helps software programmers to learn and clarify concepts.\",\"sameAs\":[\"https:\\\/\\\/stacktraceguru.com\\\/\",\"www.facebook.com\\\/Stacktraceguru\\\/\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/stacktraceguru\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Spring boot data JPA - Query for nested object - Java Code Geeks","description":"Nowadays spring boot and spring data are widely used frameworks. If you are building web application in java, spring boot is the first choice. If you have","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.javacodegeeks.com\/2020\/09\/spring-boot-data-jpa-query-for-nested-object.html","og_locale":"en_US","og_type":"article","og_title":"Spring boot data JPA - Query for nested object - Java Code Geeks","og_description":"Nowadays spring boot and spring data are widely used frameworks. If you are building web application in java, spring boot is the first choice. If you have","og_url":"https:\/\/www.javacodegeeks.com\/2020\/09\/spring-boot-data-jpa-query-for-nested-object.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_author":"www.facebook.com\/Stacktraceguru\/","article_published_time":"2020-09-05T12:15:00+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-logo.jpg","type":"image\/jpeg"}],"author":"Stacktraceguru","twitter_card":"summary_large_image","twitter_creator":"@javacodegeeks","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Stacktraceguru","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2020\/09\/spring-boot-data-jpa-query-for-nested-object.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2020\/09\/spring-boot-data-jpa-query-for-nested-object.html"},"author":{"name":"Stacktraceguru","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/08690a509ef2e0bc8bc98ddc16bb291d"},"headline":"Spring boot data JPA &#8211; Query for nested object","datePublished":"2020-09-05T12:15:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2020\/09\/spring-boot-data-jpa-query-for-nested-object.html"},"wordCount":632,"commentCount":1,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2020\/09\/spring-boot-data-jpa-query-for-nested-object.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-logo.jpg","keywords":["data","JPA","Spring Boot"],"articleSection":["Enterprise Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2020\/09\/spring-boot-data-jpa-query-for-nested-object.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2020\/09\/spring-boot-data-jpa-query-for-nested-object.html","url":"https:\/\/www.javacodegeeks.com\/2020\/09\/spring-boot-data-jpa-query-for-nested-object.html","name":"Spring boot data JPA - Query for nested object - Java Code Geeks","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2020\/09\/spring-boot-data-jpa-query-for-nested-object.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2020\/09\/spring-boot-data-jpa-query-for-nested-object.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-logo.jpg","datePublished":"2020-09-05T12:15:00+00:00","description":"Nowadays spring boot and spring data are widely used frameworks. If you are building web application in java, spring boot is the first choice. If you have","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2020\/09\/spring-boot-data-jpa-query-for-nested-object.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2020\/09\/spring-boot-data-jpa-query-for-nested-object.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2020\/09\/spring-boot-data-jpa-query-for-nested-object.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/spring-logo.jpg","width":150,"height":150,"caption":"spring-interview-questions-answers"},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2020\/09\/spring-boot-data-jpa-query-for-nested-object.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java","item":"https:\/\/www.javacodegeeks.com\/category\/java"},{"@type":"ListItem","position":3,"name":"Enterprise Java","item":"https:\/\/www.javacodegeeks.com\/category\/java\/enterprise-java"},{"@type":"ListItem","position":4,"name":"Spring boot data JPA &#8211; Query for nested object"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/08690a509ef2e0bc8bc98ddc16bb291d","name":"Stacktraceguru","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/edc9a2f27fb2b63b35c4c626a71614ab39a609abb0ad59d73cfb2fa094d3ac4f?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/edc9a2f27fb2b63b35c4c626a71614ab39a609abb0ad59d73cfb2fa094d3ac4f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/edc9a2f27fb2b63b35c4c626a71614ab39a609abb0ad59d73cfb2fa094d3ac4f?s=96&d=mm&r=g","caption":"Stacktraceguru"},"description":"Stacktraceguru is an educational website. This website helps software programmers to learn and clarify concepts.","sameAs":["https:\/\/stacktraceguru.com\/","www.facebook.com\/Stacktraceguru\/"],"url":"https:\/\/www.javacodegeeks.com\/author\/stacktraceguru"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/106686","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/116473"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=106686"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/106686\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/240"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=106686"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=106686"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=106686"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}