做头像的网站自己的名字,北京专业建网站的公司,做旅游网站运营,上海最专业的网站建设公司哪家好这是使用Jackson的REST Web服务中Java实体之间的双向关系的示例。 假设我们在两个实体Parent和Child之间存在双向关系。 使用MySQL工作台为这两个表生成SQL模式文件。 DROP SCHEMA IF EXISTS bidirectional_schema ;
CREATE SCHEMA IF NOT EXISTS bidirectional_schema DEFA… 这是使用Jackson的REST Web服务中Java实体之间的双向关系的示例。 假设我们在两个实体Parent和Child之间存在双向关系。 使用MySQL工作台为这两个表生成SQL模式文件。 DROP SCHEMA IF EXISTS bidirectional_schema ;
CREATE SCHEMA IF NOT EXISTS bidirectional_schema DEFAULT CHARACTER SET utf8 ;
USE bidirectional_schema ;-- -----------------------------------------------------
-- Table bidirectional_schema.PARENT
-- -----------------------------------------------------
DROP TABLE IF EXISTS bidirectional_schema.PARENT ;CREATE TABLE IF NOT EXISTS bidirectional_schema.PARENT (PARENT_ID INT NOT NULL ,PARENT_CONTENT VARCHAR(45) NULL ,PRIMARY KEY (PARENT_ID) )
ENGINE InnoDB;-- -----------------------------------------------------
-- Table bidirectional_schema.CHILD
-- -----------------------------------------------------
DROP TABLE IF EXISTS bidirectional_schema.CHILD ;CREATE TABLE IF NOT EXISTS bidirectional_schema.CHILD (CHILD_ID INT NOT NULL ,CHILD_CONTENT VARCHAR(45) NULL ,PARENT_PARENT_ID INT NOT NULL ,PRIMARY KEY (CHILD_ID) ,INDEX fk_CHILD_PARENT_idx (PARENT_PARENT_ID ASC) ,CONSTRAINT fk_CHILD_PARENTFOREIGN KEY (PARENT_PARENT_ID )REFERENCES bidirectional_schema.PARENT (PARENT_ID )ON DELETE NO ACTIONON UPDATE NO ACTION)
ENGINE InnoDB; 然后我们将通过此插入语句将数据插入到这两个表中 INSERT INTO bidirectional_schema.parent (PARENT_ID, PARENT_CONTENT) VALUES (1, First Parent);
INSERT INTO bidirectional_schema.child (CHILD_ID, CHILD_CONTENT, PARENT_PARENT_ID) VALUES (1, First Child, 1);
INSERT INTO bidirectional_schema.child (CHILD_ID, CHILD_CONTENT, PARENT_PARENT_ID) VALUES (2, Second Child, 1); 本示例所需的Jackson API的Maven依赖项。 dependencygroupidcom.fasterxml.jackson.core/groupidartifactidjackson-annotations/artifactidversion2.5.2/version
/dependency
dependencygroupidcom.fasterxml.jackson.core/groupidartifactidjackson-core/artifactidversion2.5.2/version
/dependency
dependencygroupidcom.fasterxml.jackson.core/groupidartifactidjackson-databind/artifactidversion2.5.2/version
/dependency 另外您还可以从以下链接中获取所需的Java EE依赖关系 https : //wikis.oracle.com/display/GlassFish/JavaEE7MavenCoordinates 使用Eclipse从上表中生成实体。 File- New- Other然后从向导中选择Tables中的JPA Entities。 将出现一个向导以创建到已创建模式的连接。 然后选择两个表子级和父级。 最后确保“列出persistence.xml中生成的类”。 您可以继续并遵循默认设置但是我在下面将映射设置选择为 persistence.xml没有什么花哨的。 但是有两点要考虑。 首先我没有指定持久性提供程序因为我倾向于使用WildFly因此应用程序将使用默认的持久性提供程序Hibernate。 其次我在WildFly上创建了一个数据源以便可以将其用于连接到我们的模式。 第三我使用了EclipseLink这就是为什么我使用此JPA提供程序org.eclipse.persistence.jpa.PersistenceProvider的原因。 检查这篇文章将WildFly指向EclipseLink。 ?xml version1.0 encodingUTF-8?
persistence version2.1 xmlnshttp://xmlns.jcp.org/xml/ns/persistence xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsdpersistence-unit nameBidirectionalPUproviderorg.eclipse.persistence.jpa.PersistenceProvider/providerjta-data-sourcejava:jboss/datasources/Bidirectional_DataSource/jta-data-sourceclasscom.ithinkisink.entity.Child/classclasscom.ithinkisink.entity.Parent/class/persistence-unit
/persistence 我们将实现的第一个类是ApplicationConfiguration类它将指向即将到来的REST服务的父路径。 package com.ithinkisink;import javax.inject.Singleton;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;/*** * author Belal**/
Singleton
ApplicationPath(rest)
public class ApplicationConfiguration extends Application {
} 然后我们将创建MyService类该类将具有两个REST Web服务。 第一个将检索获取了孩子的父母。 第二个与此相反它将检索一个提取了其父对象的孩子。 package com.ithinkisink.service;package com.ithinkisink.service;import javax.ejb.EJB;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;import com.ithinkisink.entity.Child;
import com.ithinkisink.entity.Parent;/*** * author Belal**/
Path(MyService)
public class MyService {EJBMyServiceDAO myServiceDAO;GETPath(/retrieveParentWithChildren)Produces(MediaType.APPLICATION_JSON)public Parent retrieveParentWithChildren() {return myServiceDAO.retrieveParentWithChildren();}GETPath(/retrieveChildWithParent)Produces(MediaType.APPLICATION_JSON)public Child retrieveChildWithParent() {return myServiceDAO.retrieveChildWithParent();}
} 然后我们将创建ServiceDAO并注意EntityManager注入了与我们在persistence.xml中已定义的持久性单元的连接。 我通过了持久性单元的名称来明确这一点。 但是您可以仅使用注释PersistenceContext而不指定unitName属性然后它将使用我们的持久性单元因为在我们的应用程序中没有定义其他持久性单元。 package com.ithinkisink.service;import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;import com.ithinkisink.entity.Child;
import com.ithinkisink.entity.Parent;Stateless
public class MyServiceDAO {PersistenceContext(unitNameBidirectionalPU)protected EntityManager entityManager;public Parent retrieveParentWithChildren() {int parentId 1;Query q entityManager.createQuery(SELECT p FROM Parent p JOIN FETCH p.childs WHERE p.parentId :parentId );q.setParameter(parentId, parentId);return (q.getResultList().size() 0) ? (Parent) q.getResultList().get(0) : null;}public Child retrieveChildWithParent() {int childId 1;Query q entityManager.createQuery(SELECT c FROM Child c JOIN FETCH c.parent WHERE c.childId :childId );q.setParameter(childId, childId);return (q.getResultList().size() 0) ? (Child) q.getResultList().get(0) : null;}
} 现在我们的应用程序已准备好进行测试可以将其添加到WildFly服务器。 然后启动服务器应该成功。 为了简单起见我使用Postman来测试正在运行的REST Web服务。 因此下面是Postman结果的屏幕截图。 您可以从以下链接在我的Github上找到完整的示例 https : //github.com/belalgalal/Blogging/tree/master/BidirectionalRESTJson 翻译自: https://www.javacodegeeks.com/2016/02/bidirectional-relationship-jackson-rest-web-services-wildfly.html