当前位置:主页 > 混合云 > 正文

全站加速_网站建设电话_新用户

时间:2021-05-05 09:39 来源:埃里克云 编辑:埃里克云

核心提示

几乎每个应用程序都处理两种类型的本地化文本: 在本文中,我们将看到如何在OData服务中处理用户生成的本地化数据。我们将看到数据库表应该如何设计,实体应该如何映射,ODat...

几乎每个应用程序都处理两种类型的本地化文本:

在本文中,我们将看到如何在OData服务中处理用户生成的本地化数据。我们将看到数据库表应该如何设计,实体应该如何映射,OData请求应该如何处理。

我们将考虑一个简单的例子,我们需要存储一个机构提供的课程列表。对于每个课程,我们需要存储ID、名称和描述。名称和描述需要依赖于语言。

我们将创建一个spring启动应用程序。我们将使用JPA创建实体,然后使用Olingo配置我们的应用程序来处理OData请求。

数据模型

我们将创建两个表,即Course和CourseLocalized,如图所示:

Course将存储提供的课程列表。这将有一个条目对应于使用CourseID唯一标识的每个课程。

CourseLocalized将存储每个课程名称和描述的不同翻译。

基于上述数据模型,我们将创建两个JPA实体,course和CourseLocalized如下:

实体和课程之间存在一对多关联CourseLocalized使用本地化的HashMap,其中locale是HashMap的键,object of CourseLocalized是值。HashMap"localizations"将具有课程实体项的所有对应翻译。

CourseLocalized表使用@JoinColumn注释将CourseID指定为外键。

一对多的获取类型已设置为"Earge",以便在课程实体项被激活时获取所有对应翻译阅读。当我们尝试添加或更新某些语言的课程翻译时,这很有用。这将在后面详细解释。

处理积垢操作

要处理积垢操作,我们将创建一个扩展积垢存储的接口"CourseRepository"。这将自动创建一个名为"CourseRepository"的bean。

EntityManager也可用于处理积垢操作。但是使用crudepository的好处是它负责打开和关闭实体管理器没有的事务。

实现OData

为了使我们的应用程序能够处理OData请求,我们需要注册odataservlet,指定URL映射并将工厂实现作为init参数传递给servlet。我们将实现CustomODataFactory扩展ODataJPAServiceFactory,重写initializeODataJPAContext方法,并在线程本地类LocaleContext中设置作为头参数传递的语言(ACCEPT\ u language),该类可用于在需要时获取当前语言。最后,我们将创建一个自定义OData处理器,覆盖createEntity和updateEntity方法来处理创建和更新,当然还有多种语言的翻译。

这将把持久化模型转换成OData服务生成OData实体,并使我们的应用程序能够处理OData请求。

这里我们有重写createCustomODataProcessor方法以创建自定义OData处理器,这将使我们能够用OData实体上的句柄CRUD操作覆盖方法。

这里我们将重写createEntity和updateEntity方法。重写的createEntity方法将处理课程实体中条目的创建以及用指定语言保存所创建课程的名称和描述,其中as updateEntity将处理用新语言保存课程名称和描述,或用现有语言更新名称和描述。

保存课程项除了名称和描述外,我们还需要执行以下操作:

保存课程对象,在课程表和课程本地化表中创建条目。这样可以同时保存对象和文本,而不需要使用单独的方法调用来保存它们。

同样,要用某种语言更新文本或用某种新语言保存文本,我们可以使用updateEntity方法(在实体的PUT请求时触发),我们将创建Course和CourseLocalized两个对象,然后添加或更新Course对象的本地化图,然后保存Course对象。为了避免用空值覆盖文本,请从本地化中获取courseLocalized对象(如果已经存在)。请看上面的代码示例以供参考。

现在让我解释一下为什么在设置课程和课程本地化实体之间的一对多关联时使用Fetch Type作为'Eager'。

假设我们在课程中保存了一个项目,并用英语和德语保存了名称和描述。现在我们也要用法语储蓄。我们将触发一个对Course的PUT请求,在updateEntity中,我们将创建courseLocalized对象French并将其添加到localizations map of Course中,并调用save of Course。这将删除对应于英语和德语的条目,并用法语覆盖该条目。

为了避免这种情况,在调用save之前,我们当然需要确保本地化映射也包含对应于以前保存的语言的条目。将fetch type设置为earge可以避免这种情况,因此在更新某些语言的文本或保存新语言的文本时非常有用。

测试示例:

在表格中,数据保存如下:

我们看到使用JPA处理用户生成的语言相关数据是多么容易,最后与Olingo集成创建OData服务是多么容易实现。HashMap和crudepository的使用拯救了我们,帮助我们轻松地处理CRUD操作,并允许我们创建和更新课程详细信息以及名称和描述,这也可以在单个方法调用中实现。生成的OData服务现在可以用于创建支持多种语言的本地化应用程序。

  • 域名解析_商城网站建设平台_超低折扣 域名解析_商城网站建设平台_超低折扣

    让我们假设以下场景:由于业务需求,BPC维度中的层次结构发生了显著变化(甚至在多个层次结构的情况下被删除)。因此,许多节点已过时,必须删除。没有DM包可以删除成员,并且...

  • <strong>域名交易_视频服务器的作用_优惠券</strong> 域名交易_视频服务器的作用_优惠券

    注:有关我们博客文章系列的完整概述,请访问SAP Cloud SDK概述。 有关SAP Cloud SDK新功能的概述,请参阅我们最近发布的文章。 简介 随着SAP Cloud SDK的新版本3,可以集成自定义缓存框架...

  • <strong>香港服务器_企业网站建设多少钱_多少钱</strong> 香港服务器_企业网站建设多少钱_多少钱

    此博客文章是与SAP云平台警报通知服务相关的一系列博客文章的一部分。 有关服务本身的更多详细信息,请参阅父博客文章。 让我们考虑以下情况—我们在SAP云平台上部署了一个解决...

  • <strong>金山云_美国cn2云服务器_评分榜</strong> 金山云_美国cn2云服务器_评分榜

    当我去纽约的时候,我喜欢表演,走在街上,听一些好听的音乐,吃很多好吃的东西!当然,见到名人总是很有趣的! 由于地层数据会议的召开,今年9月的行程会更好!本次会议是一...

  • <strong>负载均衡_oracle数据库管理_便宜的</strong> 负载均衡_oracle数据库管理_便宜的

    作为一个成长中的年轻人,我的老师、教练或其他成年人会毫不犹豫地使用诸如"你可以做得更好"、"我期望更多"甚至"尽力而为"这样的词汇。我(和大多数孩子一样)经常达不到期望...

  • 负载均衡_阿里云何万青_超低折扣 负载均衡_阿里云何万青_超低折扣

    您好,团队, 在生成文档的过程中,支付组件遵循一定的模式。我们做了大量的测试,生成了50多个文档,得出了以下结论: 案例1——当所有支付组件都添加到一个交易的UI中时。(...

  • <strong>腾讯云_hana服务器_限量秒杀</strong> 腾讯云_hana服务器_限量秒杀

    在这个博客中,我将向我的CAP服务添加一个UI,它使用机器学习服务:https://blogs.sap.com/2019/08/19/combine-cap-m-with-machine-learning-sdk-api-part/ 我知道许多其他博客展示了如何将UI模块添加到M...

  • <strong>网站服务器_网站建设服务商_最新活动</strong> 网站服务器_网站建设服务商_最新活动

    短链接 这篇文章是为业务流程专家在SAP S/4HANA中配置工作流而写的,同时也为您在开发自己的工作流场景(未来博客的主题)时可以做些什么做了铺垫 它将帮助您理解为什么这个概念...

  • <strong>域名交易_企业邮箱登入口_速度快</strong> 域名交易_企业邮箱登入口_速度快

    这篇博文是向SAP Analytics Cloud:Analytics Designer Hackathon提交的。 德勤数字工厂遵循"告诉我,不要告诉我"的原则,为客户提供数字化方面的实际最佳实践,以充分发挥其供应链组织的潜力...