Hibernate实战——理解对象/关系持久化 笔记
一个分布式系统无法再同一时间保持一致性、可用性以及针对分区故障的容错性。
应用程序的业务逻辑要与特定于应用程序的面向对象模型进行交互。运行时,应用程序会操作这些类的实例。
业务逻辑不是在数据库中执行的;它是在Java中实现并在应用层中执行的。这使得业务逻辑可以使用面向对象的概念,比如继承和多态。
两种数据表示的应用程序必须解决:面向对象的域模型和持久化关系模型。
粒度指的是你正在使用的类型的相对大小。
SQL数据库只显示出两种粒度类型级别:由你创建的关系类型和内置数据类型。
一个外键约束会准确地引用一张目标表,定义一个引用多张表的外键并不简单。你必须编写一个程序性约束来强制这类完整性规则。
Java两种不同的相同性概念:
- 实例标识(内存位置,"==")
- 实例相等性,通过equals方法(值相等)的实现进行判定
数据库的标识会表示为主键值的比较。
无法找到一个好的自然键,使用代理键——不会呈现给应用程序用户的键,其唯一目的是识别应用程序内部的数据。
对象持久化解决方案中,关系映射和实体关联的管理都是核心概念。
在SQL数据库中实现多对多关联,则必须引入一个链接表,它不会出现在域模型中的任何地方。
提高数据访问代码的性能——最小化对数据库的请求量。(最显而易见的方式:减少SQL查询的数量。)
检索初始实例需要在开始导航对象网络之前就弄清计划访问该网络的哪一部分。如果检索数据过多,则浪费应用层的内存。
延迟加载:仅在需要时检索数据。
对象/关系映射就是使用描述应用程序类和SQL数据库架构之间映射的元数据,将Java应用程序中的对象自动且透明地持久化到SQL数据库中的表 。ORM是通过将数据从一种标识转化成另一种表示(可逆的操作)来发挥作用的。