实体保存映射到持久化存储的数据。通常是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代理将被初始化。然后将此方法视为代理的任何其他业务方法,如果调用它,则需要初始化。