Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.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 Hibernate:一对多getId()不获取对象_Java_Mysql_Hibernate - Fatal编程技术网

Java Hibernate:一对多getId()不获取对象

Java Hibernate:一对多getId()不获取对象,java,mysql,hibernate,Java,Mysql,Hibernate,我有两个实体对象,它们之间有一对多的关联 让我们称之为“一”和“多”。我已将抓取设置为“懒惰” 因此,当我拥有“多”对象并尝试获取“一”对象的Id时,Hibernate会在内部获取完整的对象。然而,它可以根据实体“Many”给我Id,因为它将包含“One”的Id一的Id是主键,多的Id是外键。 是否可能以及如何实现?您应该编写一个HQL查询并仅选择ID。当然,这是可能的。您可以使用FetchType.LAZY并通过以下方式获取id: LazyInitializer initializer = (

我有两个实体对象,它们之间有一对多的关联

让我们称之为“一”和“多”。我已将抓取设置为“懒惰”

因此,当我拥有“多”对象并尝试获取“一”对象的Id时,Hibernate会在内部获取完整的对象。然而,它可以根据实体“Many”给我Id,因为它将包含“One”的Id一的Id是主键,多的Id是外键。


是否可能以及如何实现?

您应该编写一个HQL查询并仅选择ID。

当然,这是可能的。您可以使用
FetchType.LAZY
并通过以下方式获取
id

LazyInitializer initializer = ((HibernateProxy) many.getOne()).getHibernateLazyInitializer();
Long id = (Long) initializer.getIdentifier();
它只适用于外键关联,而不适用于联接表关联


或者您可以将HQL或criteria与投影一起使用,以仅获取
id

不,仅获取id是不可能的。Hibernate与对象一起工作,而不与属性一起工作。实际上,我记得我曾在可能的情况下参与过一个项目。我认为,如果不使用oneToMany注释链接这两个实体,而只是像获取一个简单整数一样获取id,那么它是有效的。也许你们可以在同一个实体中同时拥有两个属性,一个和一个,从没想过我们可以和那个些懒汉一起工作@VLef Hibernate仍然有一个外键,因为它位于同一个表中。当然,这个外键在默认情况下是完全隐藏的,没有加载实体,这就是为什么最终知道一种获取它的方法会很好=)@VLef如果您对非常用的Hibernate方法感兴趣,可以查看我的项目:)
LazyInitializer initializer = ((HibernateProxy) many.getOne()).getHibernateLazyInitializer();
Long id = (Long) initializer.getIdentifier();