【问题标题】:Get class mapped information Hiberante JpaTransactionManager获取类映射信息 Hibernate JpaTransactionManager
【发布时间】:2014-09-06 09:59:54
【问题描述】:


我正在尝试以编程方式获取 Hibernate 映射类的数据。 我可以这样做:

sessionFactory.getClassMetadata(o.getClass());

但据我所知,我使用的是 JpaTransactionManager,所以我没有 sessionFactory。有人知道解决方案吗? 改用 HibernateTransactionManager 并让 sessionFactory 来做这件事会不会是一场噩梦?

谢谢

【问题讨论】:

    标签: hibernate jpa-2.0 sessionfactory


    【解决方案1】:

    如果您在 DAO 类中需要它并且您已经有 Session 引用,您可以简单地调用:

    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(); 
    

    【讨论】:

    • 非常感谢弗拉德。它真的帮助了我。我不能完全像你那样做,但我能够得到 entityManager 并做几乎相同的事情。
    【解决方案2】:

    这是我的解决方案:

    @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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-05
      • 1970-01-01
      • 2017-06-19
      • 1970-01-01
      • 2012-08-17
      • 2017-10-11
      相关资源
      最近更新 更多