Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么是持久性对象?_Java_Jpa - Fatal编程技术网

Java 什么是持久性对象?

Java 什么是持久性对象?,java,jpa,Java,Jpa,我正在阅读Java EE教程,我在开头看到了这句话: 实体是轻量级持久性域对象 我已经搜索了持久性对象,但找不到明确的解释 什么是持久性域对象?它是域对象的状态 持久实例在数据库中具有表示形式和标识符值。它可能刚刚被保存或加载,但是,根据定义,它位于会话的范围内 例如,请参见JavaORM中的对象状态 免责声明:这只是一个想法。JavaEE假设了一个叫做。域模型由表示实体的对象组成,其中实体是具有与业务相关的标识的对象。(例如,如果你在一家银行工作,你的领域可能涉及账户、客户、持股和贷款等内容)

我正在阅读Java EE教程,我在开头看到了这句话:

实体是轻量级持久性域对象

我已经搜索了持久性对象,但找不到明确的解释


什么是持久性域对象?

它是域对象的状态

持久实例在数据库中具有表示形式和标识符值。它可能刚刚被保存或加载,但是,根据定义,它位于会话的范围内

例如,请参见JavaORM中的对象状态


免责声明:这只是一个想法。

JavaEE假设了一个叫做。域模型由表示实体的对象组成,其中实体是具有与业务相关的标识的对象。(例如,如果你在一家银行工作,你的领域可能涉及账户、客户、持股和贷款等内容)

下面引用Bauer和King的Java持久化与Hibernate,描述域模型:

3.1.1。分析业务领域

软件开发工作从分析问题开始 域(假定没有遗留代码或遗留数据库) 存在)

在此阶段,在问题领域专家的帮助下,您可以确定 与软件系统相关的主要实体。实体 通常是系统用户理解的概念:支付, 客户、订单、项目、投标等。有些实体可能是 用户思考的不太具体的事物的抽象,例如 定价算法,但即使是这些通常也可以理解 用户。所有这些实体都可以在的概念视图中找到 商业,我们有时称之为商业模式。开发人员和 面向对象软件的架构师分析业务模型和 创建一个面向对象的模型,仍然处于概念级别(否 Java代码)。这个模型可能像一个存在的心理图像一样简单 仅在开发人员的头脑中,或者它可能像UML一样复杂 由计算机辅助软件工程(CASE)创建的类图 像ArgoUML或TogetherJ这样的工具。下面是一个用UML表示的简单模型 如图3.1所示

此模型包含您在任何典型模型中都会找到的实体 拍卖系统:类别、物品和用户。这些实体及其 关系(可能还有它们的属性)都由 这是问题领域的模型。我们称之为面向对象的 问题域中实体的模型,仅包括 用户感兴趣的实体,域模型。这是一个 对现实世界的抽象看法

领域模型分析和设计背后的激励目标 是为了捕捉业务信息的本质,以便 应用程序的目的

理想情况下(在一种称为的方法中),这些域对象有两个特性:它们不知道诸如持久性或事务之类的基础设施问题,并且它们包含实现在业务处理过程中操作它们时发生的状态转换的逻辑;这些组合意味着业务逻辑可以与基础架构分开测试。在现实世界中,更典型的情况是看哪一个不包含任何业务逻辑,业务逻辑最终都会被删除

无论如何,这个想法是你有一个由持久实体组成的域模型。有某种配置(注释或XML文件或其他任何配置)将实体及其属性映射到数据库中的表和列,并映射实体之间的关系。有一个对象关系映射器(JPA是实现ORM的标准,Hibernate就是这样一个实现),它知道如何在数据库表示和对象图表示之间来回转换数据,以便开发人员可以操作对象而不是数据库行

对于那些声称业务逻辑不应该是域模型的一部分的人,这里有另一段引自Java Persistence with Hibernate的书,在第3.1.2节:

域模型中的实体应该封装状态和行为。 例如,用户实体应该定义用户的名称和地址 客户和计算运输成本所需的逻辑 项目(针对该特定客户)。域模型是一个丰富的对象 模型,具有复杂的关联、交互和继承 关系。一次有趣而详细的讨论 可以找到使用领域模型的面向对象技术 在企业应用程序架构模式中(Fowler,2003)或 领域驱动设计(Evans,2003)

在这本书中,我们将不会有太多关于商业规则或 我们的域模型的行为。这不是因为我们认为 不重要;相反,这种关注主要与问题正交 坚持。是我们实体的状态是持久的,所以 我们集中讨论如何在我们的国家中最好地代表国家 域模型,而不是如何表示行为。比如说这个, 书中,我们对销售物品的税收如何计算或计算不感兴趣 系统如何批准新用户帐户。我们更感兴趣 用户和他们销售的物品之间的关系如何 代表并使之持久。稍后我们将重新讨论这个问题 第四章,当我们仔细了解分层应用程序设计时 以及逻辑和数据访问的分离


因此,显然Hibernate开发人员将其视为一种可行的替代方案,尽管它在典型的企业开发中似乎不是一种常见的方法。

我只是添加了与此相关的答案

在JavaEE中,JPA实体通常是由JPA容器管理的Bean。该容器是在任何经过Java EE认证的容器中提供的