Java 持有ID而不是实体中相关实体的方法/技术的名称(或关键字)是什么?
实体保存映射到持久存储中的数据的数据。通常这是DB 您可以持有以下ID:Java 持有ID而不是实体中相关实体的方法/技术的名称(或关键字)是什么?,java,hibernate,orm,entity,entity-relationship,Java,Hibernate,Orm,Entity,Entity Relationship,实体保存映射到持久存储中的数据的数据。通常这是DB 您可以持有以下ID: class Book { private String title; public String getTitleId() { return title; } private Long publisherId; // <== **it is**! public Long getPublisherId() { return publisherId; } private
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; }
}
教材{
私有字符串标题;
公共字符串getTitleId(){return title;}
private Long publisherId;//我想你要找的条件是
急切与懒惰加载和获取策略
看
编辑:
延迟加载的实体可以称为代理,一个尚未初始化为包装器的集合
针对这些评论:
请参阅。Hibernate可以为延迟加载的实体生成ID值
从:
如何在不获取关联的情况下检索关联对象的标识符?
下面的代码不会产生任何SELECT语句,即使项目关联是惰性的
Long itemId = bid.getItem().getId();
如果getItem()
返回代理,并且使用常规访问器方法映射标识符属性,则此操作有效。如果启用了对项目id的直接字段访问,则在调用getId()时将初始化项目代理
。然后将此方法与代理的任何其他业务方法一样处理,如果调用它,则需要初始化
很抱歉,这很接近,但不完全正确。我说的是保留id与此id引用的实体。因此在SQL中,您在另一个表上有字段值与联接…无论如何,感谢您的关注!@gavenkoa,可能还想阅读Martin Fowler的和。@SotiriosDelimanolis这就是我所说的!谢谢+1@gavenkoa这就是hibernate的意思通过延迟加载。它只检索对象的id,直到需要访问其其他字段为止。因此,您可能希望向flup提供答案。@gavenkoa我已经更新了答案,Hibernate允许您查询尚未加载的实体的id。这是一个好问题,我不知道答案。有一种交谈方式会很有用g关于这个设计决策。它还可以扩展到是否在XML文档、noSQL数据库等中存储引用或内联对象的决策。顺便说一句,我建议您不要有两种类型的实体。相反,使用Hibernate为您提供的处理ID的能力。如果您将所有关系标记为惰性,那么您应该uld能够在不需要加载的情况下获取对象的ID。@TomAnderson感谢您的解释!
Long itemId = bid.getItem().getId();