All the ORM frameworks use JDBC internally. So If i am going to use Hibernate, hibernate translates the HQL queries into JDBC queries and then it will execute them. So one level of abstraction layer is there between my code and the actual JDBC execution engine.
Now JPA is a specification for handling the persistence using ORM concepts. Now i came to know that JBoss Application server is using Hibernate for implementing the JPA specification. So in order to run the persistence related code written in JPA and deployed on the JBoss server first needs to convert to Hibernate HQL queries and then transalates them into JDBC queries, there by it is having two abstraction layer. Doesn't it have performance degredation to have two levels of abstractions?