Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 持有ID而不是实体中相关实体的方法/技术的名称(或关键字)是什么?_Java_Hibernate_Orm_Entity_Entity Relationship - Fatal编程技术网

Java 持有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

实体保存映射到持久存储中的数据的数据。通常这是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; }
}
教材{
私有字符串标题;
公共字符串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();