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来获取代码中其他地方的实例。理想情况下,我希望在需要之前加载对象延迟。然后我从会话缓存中获取它。希望我正确理解你的问题。谢谢你的帮助