java - ORMLite - 强制读取对象具有相同的标识

标签 java orm ormlite foreign-collection

我正在使用 ORMLite 读取对象的层次结构。它的形状像一棵树,父级有一个由 0+ 个子级组成的 @ForeignCollection,每个子级都通过 @DatabaseField(foreign=true)< 引用其父级。/。我正在立即读取并保存整个层次结构。

由于我对 ORM 以及 ORMLite 都很陌生,所以我不知道当读取数据库中相同 ID 的对象时,它们不会< em>创建为实际上相同的对象,具有相同的身份,但多个重复项具有相同的ID。意思是,我现在面临的问题是(假设“->”代表“指”)A -> B -> C != C -> B -> A。

我想通过提供的 DAO 手动读取它们并通过 ID 将它们放在一起来解决问题,确保具有相同 ID 的对象具有相同的身份

有 ORMLite 原生的方法来解决这个问题吗?如果是,是什么,如果不是,解决这个问题的常用方法是什么?这是 ORM 的普遍问题吗?它有名字吗(我想了解更多信息)?

编辑:

我的层次结构是,一栋建筑物包含多个楼层,其中每个楼层都知道其建筑物,并且每个楼层包含多个区域,其中每个区域都知道其楼层。

最佳答案

Is this a general problem of ORM? Does it have a name (I'd like to learn more about it)?

这是 ORM 的通用模式,称为“身份映射”:在 session 中,无论代码中的哪个位置从 ORM 获取映射对象,都只会有一个对象代表数据库中的特定行(即拥有它的主键)。

我喜欢这种模式:您可以在代码的一部分中从数据库中检索某些内容,甚至可以对其进行修改,将该对象存储在实例变量中等......而在代码的另一部分中,如果您获取同一“数据库行”的对象(通过任何方式:将其作为参数传递,对数据库进行批量查询,创建主键设置为相同的"new"映射对象并将其添加到 session 中),您最终将得到相同的对象。 – 即使是之前的修改(包括未刷新的)也会在那里。

(将映射对象添加到 session 可能会因此失败,并且根据 ORM 和编程语言,此添加可能会返回另一个“相同”对象)

关于java - ORMLite - 强制读取对象具有相同的标识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6690136/

相关文章:

java - 使用 jpype 获取 jar 文件中的单例对象

java - 如何使用注解代替 HttpSecurity?

java - Hibernate 中的自然标识符是什么?

cocoa - 使用KVC生成SQL?

android - 在 Android 上使用 Ormlite 进行多线程读取的性能

java - FEST:通过他的类获取一个组件(继承自一个基础组件)

java - Introductions in Introductions in Aspect Oriented Programming中的@DeclareParents注解

php - 如何从 Doctrine Fixture 引用中获取实体?

Android OrmLite 查询表A中的所有行而不是表B中的所有行

android - 使用 GSON 将嵌套对象展平为目标对象