Java 无法从代理对象获取ID

Java 无法从代理对象获取ID,java,hibernate,Java,Hibernate,我的目标如下: @Entity @Table(name="slideshow") @Searchable public class SlideShow implements Serializable { @Id @GeneratedValue(generator="slideShowSeq") @SequenceGenerator(name="slideShowSeq", sequenceName="slideshow_seq") @SearchableId

我的目标如下:

@Entity
@Table(name="slideshow")
@Searchable
public class SlideShow implements Serializable {

    @Id
    @GeneratedValue(generator="slideShowSeq")
    @SequenceGenerator(name="slideShowSeq", sequenceName="slideshow_seq")
    @SearchableId
    int slideShowId

    @SearchableProperty
    String name

    @ManyToOne
    @JoinColumn(name = "userid", referencedColumnName="userid")
    User user

    @ManyToOne
    @JoinColumn(name = "eventid")
    Event event
...
}
eventId和userId是幻灯片表中的FK。默认情况下,用户和事件应该通过代理延迟加载到幻灯片中。因此,我应该能够从slideShow.getEvent().getEventId()中获取eventId和userId。但是,当我在调试器中单步遍历代理对象时,eventId为null。userId也是如此

此外,如果我添加

int eventId; 
String userId;
去上课。但这是在复制hibernate的功能,对吗


我错过什么了吗?代理对象是否应该延迟加载关联对象的id?如何取回它?谢谢你的帮助

如果延迟加载
事件
用户
,则当您在调试器中通过代理时,如果是,则这些引用对象的ID将不在那里,因为它们尚未加载。调试器不会触发加载过程,它们只是检查代理的内容。如果您在代理中充分使用调试器,您可能会在其中的某个地方找到ID,但它将是Hibernate代理对象的内部表示的一部分

如果实际以编程方式调用
slideShow.getEvent().getEventId()
,则应触发
事件加载,并使ID可用。ID的处理方式与延迟加载实体中的任何其他属性一样


在加载被引用实体之前,您是否确实需要该实体的ID

如果您愿意依赖一些Hibernate内部构件,您可以执行以下操作:

if (event instanceof HibernateProxy) {
  eventId = ((HibernateProxy)event).getHibernateLazyInitializer().getIdentifier();
}

我想获取被引用实体的id,这样我就可以调用session.load来获取代码中其他地方的实例。理想情况下,我希望在需要之前加载对象延迟。然后我从会话缓存中获取它。希望我正确理解你的问题。谢谢你的帮助