云网站服务器_国内数据云存储_移动云数据库服务器主机-搜集站云

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

小七 141 0

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

在本文中,我们将看到如何在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服务现在可以用于创建支持多种语言的本地化应用程序。

,数据中心解决方案