在WildFly的REST Web服务中与Jackson的双向关系

这是使用Jackson的REST Web服务中Java实体之间的双向关系的示例。

  1. 假设我们在两个实体Parent和Child之间存在双向关系。

    bidirectional_relationship_tables
  2. 使用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_PARENT`FOREIGN KEY (`PARENT_PARENT_ID` )REFERENCES `bidirectional_schema`.`PARENT` (`PARENT_ID` )ON DELETE NO ACTIONON UPDATE NO ACTION)
    ENGINE = InnoDB;
  3. 然后,我们将通过此插入语句将数据插入到这两个表中:
    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');
  4. 本示例所需的Jackson API的Maven依赖项。
    <dependency><groupid>com.fasterxml.jackson.core</groupid><artifactid>jackson-annotations</artifactid><version>2.5.2</version>
    </dependency>
    <dependency><groupid>com.fasterxml.jackson.core</groupid><artifactid>jackson-core</artifactid><version>2.5.2</version>
    </dependency>
    <dependency><groupid>com.fasterxml.jackson.core</groupid><artifactid>jackson-databind</artifactid><version>2.5.2</version>
    </dependency>

    另外,您还可以从以下链接中获取所需的Java EE依赖关系: https : //wikis.oracle.com/display/GlassFish/Java+EE+7+Maven+Coordinates

  5. 使用Eclipse从上表中生成实体。 File-> New-> Other,然后从向导中选择Tables中的JPA Entities。 将出现一个向导,以创建到已创建模式的连接。 然后选择两个表子级和父级。 最后,确保“列出persistence.xml中生成的类”。

    bidirectional_relationship_entities_generation_1

    您可以继续并遵循默认设置,但是我在下面将映射设置选择为:

    bidirectional_relationship_entities_generation_2

  6. persistence.xml没有什么花哨的。 但是有两点要考虑。 首先,我没有指定持久性提供程序,因为我倾向于使用WildFly,因此应用程序将使用默认的持久性提供程序Hibernate。 其次,我在WildFly上创建了一个数据源,以便可以将其用于连接到我们的模式。 第三,我使用了EclipseLink,这就是为什么我使用此JPA提供程序org.eclipse.persistence.jpa.PersistenceProvider的原因。 检查这篇文章,将WildFly指向EclipseLink。
    <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"><persistence-unit name="BidirectionalPU"><provider>org.eclipse.persistence.jpa.PersistenceProvider</provider><jta-data-source>java:jboss/datasources/Bidirectional_DataSource</jta-data-source><class>com.ithinkisink.entity.Child</class><class>com.ithinkisink.entity.Parent</class></persistence-unit>
    </persistence>
  7. 我们将实现的第一个类是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 {
    }
  8. 然后,我们将创建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;@GET@Path("/retrieveParentWithChildren")@Produces(MediaType.APPLICATION_JSON)public Parent retrieveParentWithChildren() {return myServiceDAO.retrieveParentWithChildren();}@GET@Path("/retrieveChildWithParent")@Produces(MediaType.APPLICATION_JSON)public Child retrieveChildWithParent() {return myServiceDAO.retrieveChildWithParent();}
    }
  9. 然后,我们将创建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(unitName="BidirectionalPU")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;}
    }
  10. 现在我们的应用程序已准备好进行测试,可以将其添加到WildFly服务器。 然后启动服务器应该成功。

    bidorectional_relationship_wildfly
  11. 为了简单起见,我使用Postman来测试正在运行的REST Web服务。 因此,下面是Postman结果的屏幕截图。

    bidirectional_rest_1 bidirectional_rest_2
  • 您可以从以下链接在我的Github上找到完整的示例: https : //github.com/belalgalal/Blogging/tree/master/BidirectionalRESTJson

翻译自: https://www.javacodegeeks.com/2016/02/bidirectional-relationship-jackson-rest-web-services-wildfly.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/354453.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Postman安装与使用(网络请求神器)--post、get请求

安装 1、Postman最早是作用chrome浏览器插件存在的&#xff0c;所以&#xff0c;你可以到chrome商店搜索下载安装&#xff0c;因为重所周知的原因&#xff0c;所以&#xff0c;大家都会找别人共享的postman插件文件来安装。由于2018年初Chrome停止对Chrome应用程序的支持。 官…

openshift用户管理_OpenShift Express Web管理控制台:入门

openshift用户管理本周&#xff0c; 最新版本的OpenShift为已经很棒的PaaS Cloud提供商带来了两个非常好的功能。 首先&#xff0c;JBoss AS已从7.0升级到7.1&#xff0c;并且所有新的Express Web Management Console已作为预览发布。 在本文中&#xff0c;我们将研究如何使用此…

linux系统搭建ftp服务器--只给某个用户访问其默认目录下的文件

1、环境: window操作系统中安装FlashFXP 软件或xftp&#xff1b; 服务器端的操作系统为centos8&#xff1b; 2、检查安装vsftpd软件 查看所有的安装的软件包 并在结果中查找包含vsftp 的文件 rpm -qa | grep vsftpd如果没有装则使用yum命令安装 yum -y install vsftpd3、创…

Openshift源中的高可用性Drools无状态服务

嗨&#xff0c;大家好&#xff01; 在这篇博客文章中&#xff0c;我想举一个简单的例子&#xff0c;展示使用Openshift 3&#xff08;Docker和Kubernetes&#xff09;扩展Drools Stateless服务有多么容易。 我将展示如何通过按需提供新实例来扩展我们的服务&#xff0c;以及如何…

jpa jsf_完整的Web应用程序Tomcat JSF Primefaces JPA Hibernate –第1部分

jpa jsf我们创建了这篇文章&#xff0c;将展示如何使用以下工具创建完整的Web应用程序&#xff1a;Tomcat7&#xff0c;带有Primefaces的JSF2&#xff08;Facelets和Libraries&#xff09;&#xff08;具有AutoComplete&#xff09;&#xff0c;JPA / Hibernate&#xff08;具有…

错题

1. 本题考查String对象的声明和赋值方式。C#中没有new String() 这种方式来构造字符串。故选 AC 2. 在CSS中&#xff0c;控制列表样式的属性有&#xff1a;list-style-type&#xff0c;list-style-position&#xff0c;list-style-image&#xff0c;list-style equals比较的是像…

javascript-发布订阅模式

说明&#xff1a;本篇文章转载自小火柴的蓝色理想的一篇博文。原文地址&#xff1a;http://www.cnblogs.com/xiaohuochai/p/8031564.html 发布—订阅模式又叫观察者模式&#xff0c;它定义对象间的一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖…

python-列表list和元组tuple

list Python内置的一种数据类型是列表&#xff1a;list。list是一种有序的集合&#xff0c;可以随时添加和删除其中的元素。 比如&#xff0c;列出班里所有同学的名字&#xff0c;就可以用一个list表示&#xff1a; >>> classmates [Michael, Bob, Tracy] >>&g…

jsf表单验证_动态表单,JSF世界期待已久

jsf表单验证新的PrimeFaces扩展版本0.5.0带来了新的DynaForm组件。 通常&#xff0c;如果知道行/列的数量&#xff0c;元素的位置等&#xff0c;则可以通过h&#xff1a;panelGrid或p&#xff1a;panelGrid构建非常简单的表单。 静态表单是正确的。 但是&#xff0c;如果在运行…

转载黑客是如何黑到你手机的?绝对涨姿势,一位黑客的Wi-Fi入侵实录!

声明&#xff1a;这是一虚构的故事&#xff0c;因此对图片均进行了模糊化处理。内容整理自网络&#xff01; 故事的主人公小黑是一名从事IT相关工作的技术宅男。五一长假来临&#xff0c;宅在家中的他相当无聊&#xff0c;打开手机上的Wi-Fi模块&#xff0c;发现附近有将近10个…

html5——DOM扩展

元素获取 1、document.getElementsByClassName (class) 通过类名获取元素&#xff0c;以类数组形式存在。 2、document.querySelector(‘div’) 通过CSS选择器获取元素&#xff0c;符合匹配条件的第1个元素。 3、document.querySelectorAll(selector) 通过CSS选择器获取元素&am…

JAVA递归实现全排列

全排列&#xff08;permutation&#xff09; 排列组合概念 排列&#xff0c;就是指从给定n个数的元素中取出指定m个数的元素&#xff0c;进行排序 组合&#xff0c;则是指从给定n个数的元素中仅仅取出指定m个数的元素&#xff0c;不考虑排序 全排列 以数字为例&#xff0c;全排…

java云端部署_Jelastic Java云端平台

java云端部署谁在Jelastic背后&#xff1f; 那是我的第一个问题&#xff0c;因此我浏览了Jelastic网站。 回答此问题的最佳方法是查看“ Jelastic团队”部分。 创始人&#xff0c;顾问&#xff0c;特殊合作伙伴构成了一支真正的专业团队。 作为特殊的合作伙伴&#xff0c;您会…

Spring Bootstrap中带有配置元数据的高级配置

在简要介绍了配置元数据并涵盖了我之前的文章《 在Spring Boot中使用配置元数据Pimp您的配置》中的基础知识之后&#xff0c;是时候看看如何进一步执行此步骤并进一步自定义配置了。 在本文中&#xff0c;我计划提出对配置属性的弃用&#xff0c;并讨论各种值提供程序&#xff…

windows系统服务器添加ssl证书

一、为域名申请证书 浏览器打开后系在对应版本&#xff1a; https://keymanager.org/ 注册账号&#xff1a; https://freessl.cn/ 安装刚刚下载的软件&#xff1b; 登录进去就可以申请域名的证书了 二、域名解析 解析完后倒回软件那点击“配置完成&#xff0c;检查一下” …

使用ANTLR在5分钟内用Java解析任何语言:例如Python

我喜欢出于多种目的处理代码&#xff0c;例如静态分析或自动重构。 对我来说&#xff0c;有趣的部分是推理从抽象语法树&#xff08;AST&#xff09;构建的模型。 为此&#xff0c;您需要一种从源文件中获取AST的方法。 使用ANTLR和完整的语法集合可在此处轻松完成&#xff1a;…

linux服务器配置ssl证书

一、申请ssl证书 这里有申请域名的ssl证书的步骤&#xff1a; https://blog.csdn.net/weixin_38797742/article/details/109471250 二、配置服务器 打开项目对应的配置文件&#xff0c;配置图中三行信息&#xff0c;端口、还有申请的证书的所在目录。 listen 443 ssl; ssl_…

视图层的数据绑定

数据绑定WXML 中的动态数据均来自对应 Page 的 data。 只要把data中的数据改变&#xff0c;视图层就会自动改变&#xff0c;无需使用DOM操作。 简单绑定数据绑定使用 Mustache 语法&#xff08;双大括号&#xff09;将变量包起来 使用方法&#xff1a; {{ 内容 }} 在组件中使用…

【原创】Linux安装Redis

【注】说是原创其实是从各个博客中copy出来的&#xff0c;不过经本人总结&#xff0c;也算是半个原创吧&#xff0c;哈哈... 1.安装环境&#xff1a; 2.安装步骤 2.1 安装目录 cd /usr/local mkdir redis 2.2 下载包 wget http://download.redis.io/releases/redis-3.2.11.tar…

原型链继承

转载于:https://www.cnblogs.com/cmblog/p/8079773.html