How to get database metadata from entity manager

前端 未结 6 1821
梦如初夏
梦如初夏 2021-02-07 09:00

I have an app which is using hibernate and jpa. I need to find out which db it is connected to so that some native sql query i execute based on db say for eg. oracle and postgre

6条回答
  •  不要未来只要你来
    2021-02-07 09:08

    Based on Emmanuel answer how to do it with Spring and hibernate:

     @Repository
     public class UserRepository {
    
        @PersistenceContext
        private EntityManager em;
    
        public void getMeta() {
            org.hibernate.engine.spi.SessionImplementor sessionImp = (org.hibernate.engine.spi.SessionImplementor) em.getDelegate();
            DatabaseMetaData metadata = null;
            try {
                metadata = sessionImp.connection().getMetaData();
                ResultSet res = metadata.getColumns(null, null, "USERS", "USERNAME");
                System.out.println("List of columns: ");
                while (res.next()) {
                    System.out.println(
                            "  " + res.getString("TABLE_SCHEM")
                                    + ", " + res.getString("TABLE_NAME")
                                    + ", " + res.getString("COLUMN_NAME")
                                    + ", " + res.getString("TYPE_NAME")
                                    + ", " + res.getInt("COLUMN_SIZE")
                                    + ", " + res.getInt("NULLABLE"));
                }
                res.close();
                System.out.println();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    

提交回复
热议问题