在实体中保存id而不是相关实体的方法/技术的名称(或关键字)是什么?



实体保存映射到持久化存储的数据。通常是DB。

可以保存id:

class Book {
    private String title;
    public String getTitleId() { return title; }
    private Long publisherId;   // <==  **it is**!
    public Long getPublisherId() { return publisherId; }
    private List<Long> authorIds;
    public List<Long> getAuthorIds() { return authorIds; }
}

或已解析实体:

class Book {
    private String title;
    public String getTitleId() { return title; }
    private Publisher publisher;   // <==  **it is**!
    public Publisher getPublisher() { return publisher; }
    private List<Author> authors;
    public List<Author> getAuthors() { return authors; }
}

如果你使用像Hibernate这样的ORM,处理已解析实体就像ORM一样简单*为你免费连接*s与相关实体。

但是如果你关心性能或者想使用DB功能将逻辑从Java移动到SQL手动SQL查询,那么具有id的实体获胜(它们更快,手动连接每个相关实体很烦人)!

因此,我决定维护两种类型的实体:具有id的实体和已解析的相关实体,以在数据类型(类型名称)中保存这些知识。

所以我开始谷歌得到最好的类名后缀,但找不到合适的关键字。请告诉我如何在实体中保持id 相关实体的方法/技术名称!

我想你要找的术语是

急切加载与延迟加载抓取策略

  • 实体框架加载相关实体
  • 关于抓取策略的简短入门
编辑:

惰性加载实体可以称为代理,作为包装器的未初始化集合。

对于评论的回应:参见Hibernate一对一:getId(),但不获取整个对象。Hibernate可以为惰性加载的实体生成ID值。

来自Hibernate FAQ:

如何检索关联对象的标识符,而不获取关联?

去做吧。下面的代码不会产生任何SELECT语句,即使项关联是惰性的。

Long itemId = bid.getItem().getId();

如果getItem()返回代理并且您将标识符属性映射为常规访问器方法,则此操作有效。如果您为Item的id启用了直接字段访问,则如果您调用getId(), Item代理将被初始化。然后将此方法视为代理的任何其他业务方法,如果调用它,则需要初始化。

最新更新