{"id":26401,"date":"2014-06-13T07:00:12","date_gmt":"2014-06-13T04:00:12","guid":{"rendered":"http:\/\/www.javacodegeeks.com\/?p=26401"},"modified":"2014-06-12T13:40:55","modified_gmt":"2014-06-12T10:40:55","slug":"hibernate-debugging-finding-the-origin-of-a-query","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2014\/06\/hibernate-debugging-finding-the-origin-of-a-query.html","title":{"rendered":"Hibernate Debugging &#8211; Finding the origin of a Query"},"content":{"rendered":"<p>It&#8217;s not always immediate why and in which part of the program is Hibernate generating a given SQL query, especially if we are dealing with code that we did not write ourselves.<\/p>\n<p>This post will go over how to configure Hibernate query logging, and use that together with other tricks to find out why and where in the program a given query is being executed.<\/p>\n<h2>What does the Hibernate query log look like<\/h2>\n<p>Hibernate has built-in query logging that looks like this:<\/p>\n<pre class=\" brush:sql\">select \/* load your.package.Employee *\/ this_.code, ... \r\nfrom employee this_ \r\nwhere this_.employee_id=?\r\n\r\nTRACE 12-04-2014@16:06:02  BasicBinder - binding parameter [1] as [NUMBER] - 1000<\/pre>\n<h2>Why can&#8217;t Hibernate log the actual query ?<\/h2>\n<p>Notice that what is logged by Hibernate is the prepared statement sent by Hibernate to the JDBC driver plus it&#8217;s parameters. The prepared statement has <code>?<\/code> in the place of the query parameters, the parameter values themselves are logged just bellow the prepared statement.<\/p>\n<p>This is not the same as the actual query sent to the database, as there is no way for Hibernate to log the actual query. The reason for this is that Hibernate only knows about the prepared statements and the parameters that it sends to the JDBC driver, and it&#8217;s the driver that will build the actual queries and then send them to the database.<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<p>In order to produce a log with the real queries, a tool like <a href=\"https:\/\/code.google.com\/p\/log4jdbc-remix\/\">log4jdbc<\/a> is needed, which will be the subject of another post.<\/p>\n<h2>How to find out the origin of the query<\/h2>\n<p>The logged query above contains a comment that allows to identify in most cases the origin of the query: if the query is due to a load by ID the comment is <code>\/* load your.entity.Name *\/<\/code>, if it&#8217;s a named query then the comment will contain the name of the query.<\/p>\n<p>If it&#8217;s a one to many lazy initialization the comment will contain the name of the class and the property that triggered it, etc.<\/p>\n<h2>Setting up the Hibernate query log<\/h2>\n<p>In order to obtain a query log, the following flags need to be set in the configuration of the session factory:<\/p>\n<pre class=\" brush:xml;wrap-lines:false\">&lt;bean id= \"entityManagerFactory\" class=\"org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean\" &gt;\r\n  ...\r\n  &lt;property name=\"jpaProperties\" &gt;\r\n  &lt;props&gt;\r\n      &lt;prop key=\"hibernate.show_sql\" &gt;true&lt;\/ prop&gt;\r\n      &lt;prop key=\"hibernate.format_sql\" &gt;true&lt;\/ prop&gt;\r\n      &lt;prop key=\"hibernate.use_sql_comments\"&gt;true&lt;\/prop&gt;\r\n  &lt;\/props&gt;\r\n&lt;\/property&gt;<\/pre>\n<p>The example above is for Spring configuration of an entity manager factory. This is the meaning of the flags:<\/p>\n<ul>\n<li><code>show_sql<\/code> enables query logging<\/li>\n<li><code>format_sql<\/code> pretty prints the SQL<\/li>\n<li><code>use_sql_comments<\/code> adds an explanatory comment<\/li>\n<\/ul>\n<p>In order to log the query parameters, the following <code>log4j<\/code> or equivalent information is needed:<\/p>\n<pre class=\" brush:xml\">&lt;logger name=\"org.hibernate.type\"&gt;\r\n    &lt;level value=\"trace\" \/&gt;\r\n&lt;\/logger &gt;<\/pre>\n<h2>If everything else fails<\/h2>\n<p>In many cases the comment created by <code>use_sql_comments<\/code> is enough to identify the origin of the query. If this is not sufficient, then we can start by identifying the entity returned by the query based on the table names involved, and put a breakpoint in the constructor of the returned entity.<\/p>\n<p>If the entity does not have a constructor, then we can create one and put the breakpoint in the call to <code>super()<\/code>:<\/p>\n<pre class=\" brush:java\">@Entity\r\npublic class Employee {\r\n    public Employee() {\r\n        super(); \/\/ put the breakpoint here\r\n    }\r\n    ...\r\n}<\/pre>\n<p>When the breakpoint is hit, go to the IDE debug view containing the stack call of the program and go through it from top to bottom. The place where the query was made in the program will be there in the call stack.<\/p>\n<div class=\"attribution\">\n<table>\n<tbody>\n<tr>\n<td><span class=\"reference\">Reference: <\/span><\/td>\n<td><a href=\"http:\/\/blog.jhades.org\/why-and-where-is-hibernate-doing-this-query\/\">Hibernate Debugging &#8211; Finding the origin of a Query<\/a> from our <a href=\"http:\/\/www.javacodegeeks.com\/jcg\">JCG partner<\/a> Aleksey Novik at the <a href=\"http:\/\/blog.jhades.org\/\">The JHades Blog<\/a> blog.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>It&#8217;s not always immediate why and in which part of the program is Hibernate generating a given SQL query, especially if we are dealing with code that we did not write ourselves. This post will go over how to configure Hibernate query logging, and use that together with other tricks to find out why and &hellip;<\/p>\n","protected":false},"author":568,"featured_media":153,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[31],"class_list":["post-26401","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-enterprise-java","tag-jboss-hibernate"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Hibernate Debugging - Finding the origin of a Query<\/title>\n<meta name=\"description\" content=\"It&#039;s not always immediate why and in which part of the program is Hibernate generating a given SQL query, especially if we are dealing with code that we\" \/>\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\/2014\/06\/hibernate-debugging-finding-the-origin-of-a-query.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Hibernate Debugging - Finding the origin of a Query\" \/>\n<meta property=\"og:description\" content=\"It&#039;s not always immediate why and in which part of the program is Hibernate generating a given SQL query, especially if we are dealing with code that we\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2014\/06\/hibernate-debugging-finding-the-origin-of-a-query.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:published_time\" content=\"2014-06-13T04:00:12+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/jboss-hibernate-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=\"Aleksey Novik\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@https:\/\/twitter.com\/JhadesDev\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Aleksey Novik\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/06\\\/hibernate-debugging-finding-the-origin-of-a-query.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/06\\\/hibernate-debugging-finding-the-origin-of-a-query.html\"},\"author\":{\"name\":\"Aleksey Novik\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/7d67bcfba8c4c2dc66f64696fd43a7c6\"},\"headline\":\"Hibernate Debugging &#8211; Finding the origin of a Query\",\"datePublished\":\"2014-06-13T04:00:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/06\\\/hibernate-debugging-finding-the-origin-of-a-query.html\"},\"wordCount\":528,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/06\\\/hibernate-debugging-finding-the-origin-of-a-query.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/jboss-hibernate-logo.jpg\",\"keywords\":[\"JBoss Hibernate\"],\"articleSection\":[\"Enterprise Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/06\\\/hibernate-debugging-finding-the-origin-of-a-query.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/06\\\/hibernate-debugging-finding-the-origin-of-a-query.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/06\\\/hibernate-debugging-finding-the-origin-of-a-query.html\",\"name\":\"Hibernate Debugging - Finding the origin of a Query\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/06\\\/hibernate-debugging-finding-the-origin-of-a-query.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/06\\\/hibernate-debugging-finding-the-origin-of-a-query.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/jboss-hibernate-logo.jpg\",\"datePublished\":\"2014-06-13T04:00:12+00:00\",\"description\":\"It's not always immediate why and in which part of the program is Hibernate generating a given SQL query, especially if we are dealing with code that we\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/06\\\/hibernate-debugging-finding-the-origin-of-a-query.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/06\\\/hibernate-debugging-finding-the-origin-of-a-query.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/06\\\/hibernate-debugging-finding-the-origin-of-a-query.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/jboss-hibernate-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/jboss-hibernate-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/06\\\/hibernate-debugging-finding-the-origin-of-a-query.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\":\"Hibernate Debugging &#8211; Finding the origin of a Query\"}]},{\"@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\\\/7d67bcfba8c4c2dc66f64696fd43a7c6\",\"name\":\"Aleksey Novik\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fdd3c156085cc7c72b32afe338e88a3a3c4979223e6a66abc62a37f99eb65056?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fdd3c156085cc7c72b32afe338e88a3a3c4979223e6a66abc62a37f99eb65056?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fdd3c156085cc7c72b32afe338e88a3a3c4979223e6a66abc62a37f99eb65056?s=96&d=mm&r=g\",\"caption\":\"Aleksey Novik\"},\"description\":\"Software developer, Likes to learn new technologies, hang out on stackoverflow and blog on tips and tricks on Java\\\/Javascript polyglot enterprise development.\",\"sameAs\":[\"http:\\\/\\\/blog.jhades.org\\\/\",\"https:\\\/\\\/x.com\\\/https:\\\/\\\/twitter.com\\\/JhadesDev\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/aleksey-novik\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Hibernate Debugging - Finding the origin of a Query","description":"It's not always immediate why and in which part of the program is Hibernate generating a given SQL query, especially if we are dealing with code that we","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\/2014\/06\/hibernate-debugging-finding-the-origin-of-a-query.html","og_locale":"en_US","og_type":"article","og_title":"Hibernate Debugging - Finding the origin of a Query","og_description":"It's not always immediate why and in which part of the program is Hibernate generating a given SQL query, especially if we are dealing with code that we","og_url":"https:\/\/www.javacodegeeks.com\/2014\/06\/hibernate-debugging-finding-the-origin-of-a-query.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2014-06-13T04:00:12+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/jboss-hibernate-logo.jpg","type":"image\/jpeg"}],"author":"Aleksey Novik","twitter_card":"summary_large_image","twitter_creator":"@https:\/\/twitter.com\/JhadesDev","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Aleksey Novik","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2014\/06\/hibernate-debugging-finding-the-origin-of-a-query.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2014\/06\/hibernate-debugging-finding-the-origin-of-a-query.html"},"author":{"name":"Aleksey Novik","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/7d67bcfba8c4c2dc66f64696fd43a7c6"},"headline":"Hibernate Debugging &#8211; Finding the origin of a Query","datePublished":"2014-06-13T04:00:12+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2014\/06\/hibernate-debugging-finding-the-origin-of-a-query.html"},"wordCount":528,"commentCount":1,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2014\/06\/hibernate-debugging-finding-the-origin-of-a-query.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/jboss-hibernate-logo.jpg","keywords":["JBoss Hibernate"],"articleSection":["Enterprise Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2014\/06\/hibernate-debugging-finding-the-origin-of-a-query.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2014\/06\/hibernate-debugging-finding-the-origin-of-a-query.html","url":"https:\/\/www.javacodegeeks.com\/2014\/06\/hibernate-debugging-finding-the-origin-of-a-query.html","name":"Hibernate Debugging - Finding the origin of a Query","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2014\/06\/hibernate-debugging-finding-the-origin-of-a-query.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2014\/06\/hibernate-debugging-finding-the-origin-of-a-query.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/jboss-hibernate-logo.jpg","datePublished":"2014-06-13T04:00:12+00:00","description":"It's not always immediate why and in which part of the program is Hibernate generating a given SQL query, especially if we are dealing with code that we","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2014\/06\/hibernate-debugging-finding-the-origin-of-a-query.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2014\/06\/hibernate-debugging-finding-the-origin-of-a-query.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2014\/06\/hibernate-debugging-finding-the-origin-of-a-query.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/jboss-hibernate-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/jboss-hibernate-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2014\/06\/hibernate-debugging-finding-the-origin-of-a-query.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":"Hibernate Debugging &#8211; Finding the origin of a Query"}]},{"@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\/7d67bcfba8c4c2dc66f64696fd43a7c6","name":"Aleksey Novik","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/fdd3c156085cc7c72b32afe338e88a3a3c4979223e6a66abc62a37f99eb65056?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/fdd3c156085cc7c72b32afe338e88a3a3c4979223e6a66abc62a37f99eb65056?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/fdd3c156085cc7c72b32afe338e88a3a3c4979223e6a66abc62a37f99eb65056?s=96&d=mm&r=g","caption":"Aleksey Novik"},"description":"Software developer, Likes to learn new technologies, hang out on stackoverflow and blog on tips and tricks on Java\/Javascript polyglot enterprise development.","sameAs":["http:\/\/blog.jhades.org\/","https:\/\/x.com\/https:\/\/twitter.com\/JhadesDev"],"url":"https:\/\/www.javacodegeeks.com\/author\/aleksey-novik"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/26401","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\/568"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=26401"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/26401\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/153"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=26401"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=26401"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=26401"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}