我试图以编程方式获取Hibernate映射类的数据。
我可以这样做:
sessionFactory.getClassMetadata(o.getClass());
但是我使用的是JpaTransactionManager,所以据我所知,我没有sessionFactory。有人知道解决方案吗?
改变HibernateTransactionManager并让sessionFactory做到这一点是一场噩梦吗?
感谢
答案 0 :(得分:0)
如果您需要在DAO课程中以及已有会话参考的地方,您只需致电:
session.getSessionFactory().getClassMetadata(o.getClass());
如果你需要它并使用JPA 2.1,你可以使用:
SessionFactory sessionFactory = jpaTransactionManager.getEntityManagerFactory().unwrap(SessionFactory.class);
sessionFactory.getClassMetadata(o.getClass());
如果您不使用JPA 2.1,则可以:
EntityManagerFactory entityManagerFactory = jpaTransactionManager.getEntityManagerFactory();
EntityManager entityManager = entityManagerFactory.createEntityManager();
Session session = entityManager.unwrap(Session.class);
session.getSessionFactory().getClassMetadata(o.getClass());
...
entityManager.close();
答案 1 :(得分:0)
这是我的解决方案:
@Component
public class MetadataInfo {
@PersistenceContext
EntityManager entityManager;
private ClassMetadata getClassMetadata() {
Session session = entityManager.unwrap(Session.class);
ClassMetadata classMetadata = session.getSessionFactory().getClassMetadata(User.class);
return classMetadata;
}
}