Hibernate SessionFactory与EntityManagerFactory

问题

我是Hibernate的新手,不知道是否使用aSessionFactoryEntityManagerFactory获取hibernate会话。两者有什么区别?优点缺点?


#1 热门回答(301 赞)

PreferEntityManagerFactoryandEntityManager。它们由JPA标准定义。

SessionFactorySession是特定于hibernate的。 EntityManager在引擎盖下启动了休眠会话。如果你需要EntityManager中未提供的某些特定功能,你可以通过以下方式获取会话:

Session session = entityManager.unwrap(Session.class);

#2 热门回答(28 赞)

我想补充一点,你也可以通过从266640921调用getDelegate()方法获得Hibernate的会话。

例如:

Session session = (Session) entityManager.getDelegate();

#3 热门回答(19 赞)

使用EntityManagerFactory方法允许我们使用回调方法注释,如@ PrePersist,@ PostPersist,@ PreUpdate,无需额外配置。

使用SessionFactory时使用类似的回调将需要额外的努力。

相关的Hibernate文档可以找到9236371717和here

Related SOF QuestionandSpring Forum discussion