{"id":4411,"date":"2020-08-17T17:36:00","date_gmt":"2020-08-17T12:06:00","guid":{"rendered":"https:\/\/www.h2kinfosys.com\/blog\/?p=4411"},"modified":"2020-08-17T17:36:03","modified_gmt":"2020-08-17T12:06:03","slug":"spring-jpa","status":"publish","type":"post","link":"https:\/\/www.h2kinfosys.com\/blog\/spring-jpa\/","title":{"rendered":"Spring JPA"},"content":{"rendered":"\n<p>Spring JPA is not a JPA provider but a specification. It is a library\/framework that adds an extra layer of abstraction to the top of the JPA provider. It hides the Java Persistence API and the JPA provider behind its repository abstraction.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Features of Spring Data JPA:<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>It creates and supports repositories created with spring and JPA.<\/li><li>It supports JPA queries.<\/li><li>It supports batch loading, sorting, and dynamical queries.<\/li><li>It supports XML mapping for entities.<\/li><li>It reduces the code size for generic <a href=\"https:\/\/en.wikipedia.org\/wiki\/Create,_read,_update_and_delete\" rel=\"nofollow noopener\" target=\"_blank\">CRUD operations<\/a> by using the Crud Repository.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Components needed:<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>The JDBC driver that enables Java applications to interact with the database.<\/li><li>The data source that will provide all technical information needed to access data.<\/li><li>The JPA Provider that will implement the Java Persistence API. We also use Hibernate because it is the most common JPA provider.<\/li><li>Spring Data JPA that will hide the used JPA provider behind its repository abstraction.<\/li><\/ul>\n\n\n\n<p>The Java Persistence API is used for managing, persisting, and accessing data between objects and the relational database. <a href=\"https:\/\/www.h2kinfosys.com\/blog\/hibernate-configuration\/\">Hibernate <\/a>is an ORM (Object Relational Mapping) tool that implements JPA specification.<\/p>\n\n\n\n<p>The below program illustrates how to integrate spring with JPA using the Hibernate as a JPA provider:<\/p>\n\n\n\n<p><em><strong>Step 1: <\/strong>pom.xml<\/em><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;project xmlns=\"http:\/\/maven.apache.org\/POM\/4.0.0\" xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\n\u00a0\u00a0xsi:schemaLocation=\"http:\/\/maven.apache.org\/POM\/4.0.0\u00a0\n\u00a0\u00a0http:\/\/maven.apache.org\/xsd\/maven-4.0.0.xsd\">\n\u00a0\u00a0&lt;modelVersion>4.0.0&lt;\/modelVersion>\n\u00a0\u00a0&lt;groupId>com.innovationM.hibernate&lt;\/groupId>\n\u00a0\u00a0&lt;artifactId>spring-hibernate-jpa-example&lt;\/artifactId>\n\u00a0\u00a0&lt;version>0.0.1-SNAPSHOT&lt;\/version>\n\u00a0\u00a0&lt;packaging>jar&lt;\/packaging>\n\u00a0\u00a0&lt;name>spring-hibernate-jpa-tutorial&lt;\/name>\n\u00a0\u00a0&lt;url>http:\/\/maven.apache.org&lt;\/url>\n\u00a0\u00a0&lt;properties>\n\u00a0\u00a0\u00a0\u00a0&lt;project.build.sourceEncoding>UTF-8&lt;\/project.build.sourceEncoding>\n\u00a0\u00a0&lt;\/properties>\n\u00a0\u00a0&lt;dependencies>\n\u00a0\u00a0\u00a0\u00a0&lt;dependency>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;groupId>org.springframework&lt;\/groupId>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;artifactId>spring-context&lt;\/artifactId>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;version>4.3.7.RELEASE&lt;\/version>\n\u00a0\u00a0\u00a0\u00a0&lt;\/dependency>\n\u00a0\u00a0\u00a0\u00a0&lt;dependency>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;groupId>org.springframework&lt;\/groupId>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;artifactId>spring-orm&lt;\/artifactId>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;version>4.3.7.RELEASE&lt;\/version>\n\u00a0\u00a0\u00a0\u00a0&lt;\/dependency>\n\u00a0\u00a0\u00a0\u00a0&lt;dependency>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;groupId>org.hibernate&lt;\/groupId>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;artifactId>hibernate-core&lt;\/artifactId>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;version>5.2.9.Final&lt;\/version>\n\u00a0\u00a0\u00a0\u00a0&lt;\/dependency>\n\u00a0\u00a0\u00a0\u00a0&lt;dependency>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;groupId>org.apache.commons&lt;\/groupId>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;artifactId>commons-dbcp2&lt;\/artifactId>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;version>2.1.1&lt;\/version>\n\u00a0\u00a0\u00a0\u00a0&lt;\/dependency>\n\u00a0\u00a0\u00a0\u00a0&lt;dependency>\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;groupId>mysql&lt;\/groupId>\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;artifactId>mysql-connector-java&lt;\/artifactId>\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;version>6.0.5&lt;\/version>\u00a0\n\u00a0\u00a0\u00a0\u00a0&lt;\/dependency>\n\u00a0\u00a0&lt;\/dependencies>\n\u00a0\u00a0&lt;build>\n\u00a0\u00a0\u00a0\u00a0&lt;sourceDirectory>src\/main\/java&lt;\/sourceDirectory>\n\u00a0\u00a0\u00a0\u00a0&lt;plugins>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;plugin>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;artifactId>maven-compiler-plugin&lt;\/artifactId>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;version>3.5.1&lt;\/version>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;configuration>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;source>1.8&lt;\/source>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;target>1.8&lt;\/target>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/configuration>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/plugin>\n\u00a0\u00a0\u00a0\u00a0&lt;\/plugins>\n\u00a0\u00a0&lt;\/build>\n&lt;\/project><\/pre>\n\n\n\n<p><em><strong>Step 2: <\/strong>Create a JPA entity class using setter and getter methods.<\/em><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">package com.innovationM.spring.entity;\nimport javax.persistence.Column;\nimport javax.persistence.GeneratedValue;\nimport javax.persistence.Entity;\nimport javax.persistence.Id;\nimport javax.persistence.GenerationType;\nimport javax.persistence.Table;\n@Entity\n@Table(name = \"PERSONS\")\npublic class Person {\n\u00a0\u00a0\u00a0@Id\n\u00a0\u00a0\u00a0@GeneratedValue(strategy = GenerationType.IDENTITY)\n\u00a0\u00a0\u00a0private Long id;\n\u00a0\u00a0\u00a0@Column(name = \"FIRST_NAME\")\n\u00a0\u00a0\u00a0private String firstName;\n\u00a0\u00a0\u00a0@Column(name = \"LAST_NAME\")\n\u00a0\u00a0\u00a0private String lastName;\n\u00a0\u00a0\u00a0@Column(name = \"EMAIL\")\n\u00a0\u00a0\u00a0private String email;\n\u00a0\u00a0\u00a0public Person() {}\n\u00a0\u00a0\u00a0public Person(String firstName, String lastName, String email) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0this.firstName = firstName;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0this.lastName = lastName;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0this.email = email;\n\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\/\/getter and setter methods.\n}<\/pre>\n\n\n\n<p><em><strong>Step 3: <\/strong>Create PersonDao.java. It will contain all the methods implemented by implementation class.<\/em><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">package com.innovationM.spring.dao;\nimport java.util.List;\nimport com.innovationM.spring.entity.Person;\npublic interface PersonDao {\n\u00a0\u00a0\u00a0void add(Person person);\n\u00a0\u00a0\u00a0List&lt;Person> listPersons();\n}<\/pre>\n\n\n\n<p><em><strong>Step 4: <\/strong>Create PersonDaoImp.java that will provide a method body to persist data in the database.<\/em><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">package com.innovationM.spring.dao;\nimport java.util.List;\nimport javax.persistence.EntityManager;\nimport javax.persistence.PersistenceContext;\nimport javax.persistence.criteria.CriteriaQuery;\nimport javax.persistence.criteria.Root;\nimport org.springframework.stereotype.Repository;\nimport com.innovationM.spring.entity.Person;\n@Repository\npublic class PersonDaoImp implements PersonDao {\n\u00a0\u00a0\u00a0@PersistenceContext\n\u00a0\u00a0\u00a0private EntityManager em;\n\u00a0\u00a0\u00a0@Override\n\u00a0\u00a0\u00a0public void add(Person person) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0em.persist(person);\n\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0@Override\n\u00a0\u00a0\u00a0public List&lt;Person> listPersons() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0CriteriaQuery&lt;Person> criteriaQuery = em.getCriteriaBuilder().createQuery(Person.class);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0@SuppressWarnings(\"unused\")\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Root&lt;Person> root = criteriaQuery.from(Person.class);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return em.createQuery(criteriaQuery).getResultList();\n\u00a0\u00a0\u00a0}\n}<\/pre>\n\n\n\n<p><em><strong>Step 5: <\/strong>Create PersonService.java<\/em><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">package com.innovationM.spring.service;\nimport java.util.List;\nimport com.innovationM.spring.entity.Person;\npublic interface PersonService {\n\u00a0\u00a0\u00a0\u00a0void add(Person person);\n\u00a0\u00a0\u00a0\u00a0List&lt;Person> listPersons();\n}<\/pre>\n\n\n\n<p><em><strong>Step 6: <\/strong>Create PersonServiceImp.java<\/em><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">package com.innovationM.spring.service;\nimport java.util.List;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport org.springframework.transaction.annotation.Transactional;\nimport com.innovationM.spring.dao.PersonDao;\nimport com.innovationM.spring.entity.Person;\n@Service\npublic class PersonServiceImp implements PersonService {\n\u00a0\u00a0\u00a0@Autowired\n\u00a0\u00a0\u00a0private PersonDao userDao;\n\u00a0\u00a0\u00a0@Transactional\n\u00a0\u00a0\u00a0public void add(Person person) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0userDao.add(person);\n\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0@Transactional(readOnly = true)\n\u00a0\u00a0\u00a0public List&lt;Person> listPersons() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return userDao.listPersons();\n\u00a0\u00a0\u00a0}\n}<\/pre>\n\n\n\n<p><em><strong>Step 7: <\/strong>persistence.xml file which will connect with the database.<\/em><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;persistence xmlns=\"http:\/\/xmlns.jcp.org\/xml\/ns\/persistence\"\n\u00a0\u00a0xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\n\u00a0\u00a0xsi:schemaLocation=\"http:\/\/xmlns.jcp.org\/xml\/ns\/persistence\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0http:\/\/xmlns.jcp.org\/xml\/ns\/persistence\/persistence_2_1.xsd\"\n\u00a0\u00a0version=\"2.1\">\n\u00a0\u00a0&lt;persistence-unit name=\"LOCAL_PERSISTENCE\">\n\u00a0\u00a0\u00a0\u00a0&lt;description> Spring Hibernate JPA Configuration Example&lt;\/description>\n\u00a0\u00a0\u00a0\u00a0&lt;provider>org.hibernate.jpa.HibernatePersistenceProvider&lt;\/provider>\n\u00a0\u00a0\u00a0\u00a0&lt;properties>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;property name=\"javax.persistence.jdbc.driver\" value=\"com.mysql.cj.jdbc.Driver\" \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;property name=\"javax.persistence.jdbc.url\" value=\"jdbc:mysql:\/\/localhost:3306\/demo\" \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;property name=\"javax.persistence.jdbc.user\" value=\"root\" \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;property name=\"javax.persistence.jdbc.password\" value=\"root\" \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;property name=\"hibernate.show_sql\" value=\"true\" \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;property name=\"hibernate.hbm2ddl.auto\" value=\"update\" \/>\n\u00a0\u00a0\u00a0\u00a0&lt;\/properties>\n\u00a0\u00a0&lt;\/persistence-unit>\n&lt;\/persistence><\/pre>\n\n\n\n<p><em><strong>Step 8: <\/strong>Create Spring configuration class.<\/em><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">package com.innovationM.spring.config;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.ComponentScan;\nimport org.springframework.context.annotation.ComponentScans;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.orm.jpa.JpaTransactionManager;\nimport org.springframework.orm.jpa.LocalEntityManagerFactoryBean;\nimport org.springframework.transaction.annotation.EnableTransactionManagement;\n@Configuration\n@EnableTransactionManagement\n@ComponentScans(value = { @ComponentScan(\"com.innovationM.spring.dao\"),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0@ComponentScan(\"com.innovationM.spring.service\") })\npublic class AppConfig {\n\u00a0\u00a0\u00a0@Bean\n\u00a0\u00a0\u00a0public LocalEntityManagerFactoryBean geEntityManagerFactoryBean() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0LocalEntityManagerFactoryBean factoryBean = new LocalEntityManagerFactoryBean();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0factoryBean.setPersistenceUnitName(\"LOCAL_PERSISTENCE\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return factoryBean;\n\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0@Bean\n\u00a0\u00a0\u00a0public JpaTransactionManager geJpaTransactionManager() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0JpaTransactionManager transactionManager = new JpaTransactionManager();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0transactionManager.setEntityManagerFactory(geEntityManagerFactoryBean().getObject());\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return transactionManager;\n\u00a0\u00a0\u00a0}\n}<\/pre>\n\n\n\n<p><em><strong>Step 9: <\/strong>Create a main class to run the application.<\/em><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">package com.innovationM.spring;\nimport java.sql.SQLException;\nimport java.util.List;\nimport org.springframework.context.annotation.AnnotationConfigApplicationContext;\nimport com.innovationM.spring.config.AppConfig;\nimport com.innovationM.spring.entity.Person;\nimport com.innovationM.spring.service.PersonService;\npublic class MainApp {\n\u00a0\u00a0\u00a0public static void main(String[] arg) throws SQLException {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0AnnotationConfigApplicationContext context =\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0new AnnotationConfigApplicationContext(AppConfig.class);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0PersonService personService = context.getBean(PersonService.class);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Add Persons\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0personService.add(new Person(\"Rahul\", \"Gupta\", \"rahulgupta@company.com\"));\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0personService.add(new Person(\"Akshay\", \"Sharma\", \"akshaysharma@company.com\"));\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0personService.add(new Person(\"Ankit\", \"Sarraf\", \"ankitsarraf@company.com\"));\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Get Persons\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0List&lt;Person> persons = personService.listPersons();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0for (Person person : persons) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0System.out.println(\"Id = \"+person.getId());\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0System.out.println(\"First Name = \"+person.getFirstName());\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0System.out.println(\"Last Name = \"+person.getLastName());\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0System.out.println(\"Email = \"+person.getEmail());\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0System.out.println();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0context.close();\n\u00a0\u00a0\u00a0}\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Output on the console will be:<\/strong><\/h3>\n\n\n<pre class=\"rich-text block-editor-rich-text__editable wp-block-verse\" role=\"textbox\" contenteditable=\"true\" spellcheck=\"false\" aria-multiline=\"true\" aria-label=\"Write\u2026\"><br \/>Hibernate: insert into PERSONS (EMAIL, FIRST_NAME, LAST_NAME) values (?, ?, ?)<br data-rich-text-line-break=\"true\" \/>Hibernate: insert into PERSONS (EMAIL, FIRST_NAME, LAST_NAME) values (?, ?, ?)<br data-rich-text-line-break=\"true\" \/>Hibernate: insert into PERSONS (EMAIL, FIRST_NAME, LAST_NAME) values (?, ?, ?)<br data-rich-text-line-break=\"true\" \/>Hibernate: select person0_.id as id1_0_, person0_.EMAIL as EMAIL2_0_, person0_.FIRST_NAME as FIRST_NA3_0_, person0_.LAST_NAME as LAST_NAM4_0_ from PERSONS person0_<br data-rich-text-line-break=\"true\" \/>Id = 1<br data-rich-text-line-break=\"true\" \/>First Name = Rahul<br data-rich-text-line-break=\"true\" \/>Last Name = Gupta<br data-rich-text-line-break=\"true\" \/>Email = rahulgupta@company.com<br data-rich-text-line-break=\"true\" \/>Id = 2<br data-rich-text-line-break=\"true\" \/>First Name = Akshay<br data-rich-text-line-break=\"true\" \/>Last Name = Sharma<br data-rich-text-line-break=\"true\" \/>Email = akshaysharma@company.com<br data-rich-text-line-break=\"true\" \/>Id = 3<br data-rich-text-line-break=\"true\" \/>First Name = Ankit<br data-rich-text-line-break=\"true\" \/>Last Name = Sarraf<br data-rich-text-line-break=\"true\" \/>Email = ankitsarraf@company.com<\/pre>","protected":false},"excerpt":{"rendered":"<p>Spring JPA is not a JPA provider but a specification. It is a library\/framework that adds an extra layer of abstraction to the top of the JPA provider. It hides the Java Persistence API and the JPA provider behind its repository abstraction. Features of Spring Data JPA: It creates and supports repositories created with spring [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":4419,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[42],"tags":[1117,1234,1233],"class_list":["post-4411","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java-tutorials","tag-components","tag-features-of-spring-data","tag-spring-jpa"],"_links":{"self":[{"href":"https:\/\/www.h2kinfosys.com\/blog\/wp-json\/wp\/v2\/posts\/4411","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.h2kinfosys.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.h2kinfosys.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.h2kinfosys.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.h2kinfosys.com\/blog\/wp-json\/wp\/v2\/comments?post=4411"}],"version-history":[{"count":0,"href":"https:\/\/www.h2kinfosys.com\/blog\/wp-json\/wp\/v2\/posts\/4411\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.h2kinfosys.com\/blog\/wp-json\/wp\/v2\/media\/4419"}],"wp:attachment":[{"href":"https:\/\/www.h2kinfosys.com\/blog\/wp-json\/wp\/v2\/media?parent=4411"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.h2kinfosys.com\/blog\/wp-json\/wp\/v2\/categories?post=4411"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.h2kinfosys.com\/blog\/wp-json\/wp\/v2\/tags?post=4411"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}