如何正确获取实体相关对象

Posted

技术标签:

【中文标题】如何正确获取实体相关对象【英文标题】:How to get an entity-related object correctly 【发布时间】:2021-02-05 01:07:45 【问题描述】:

我大约有以下实体:

public class Article 
    private String name;
    private Long fileId;

如您所见,它有一个字段fileld,其中包含关联文件的id,它也是一个实体。但是,该文件对Article 一无所知,因此唯一连接它们的是Article 中的fileId 字段。因此,它们必须明确链接,以免丢失。现在要获取链接文件,我必须为每个Article 对数据库进行单独查询。也就是说,如果我想获取 10 个Articles 的列表,我需要向数据库发出 10 次请求,并通过其 id 获取文件。这看起来非常低效。怎样才能做得更好?我用jooq,所以不能用JPA,所以不能用文件对象代替fileId字段。有什么想法吗?

【问题讨论】:

【参考方案1】:

我将假设您的基础表是这样的:

create table file (
  id      bigint primary key
  content blob
);
create table article (
  name    text,
  file_id bigint references file
);

如果您可以使用这样的单个查询将所有 10 个文件提取到内存中:

Result<?> result =
ctx.select()
   .from(ARTICLE)
   .join(FILE).on(ARTICLE.FILE_ID.eq(FILE.ID))
   .fetch();

【讨论】:

以上是关于如何正确获取实体相关对象的主要内容,如果未能解决你的问题,请参考以下文章

如何使用CoreData获取相关实体的对象?

核心数据:如何根据相关实体的属性获取实体

如何从 Core Data 中的关系相关实体获取属性?

CakePHP 3.x 从实体获取相关数据

如何获取与其他不使用 id 字段相关的托管对象?

如何从Mono获取实体类型 ?