سوال بسیاری خوبی است!
این سوال در ذهن تمام افرادی که می خواهند کار با ORMها در جاوا را یاد بگیرند به وجود می آید!
به طور کلی می توان گفت که JPA یک استاندارد است. یا این که به صورت ساده تر می توان گفت که JPA یک فایل PDF به علاوه یک JAR فایل می باشد که درون آن نحوه پیاده سازی کتابخانه ORM در جاوا توضیح داده شده است.
حال با توجه به این استاندارد هر شرکت یا شخصی که بخواهد برای جاوا ORM طراحی کند می تواند از این استاندارد تبعیت کند.
شرکت JBoss نیز یک ORM به نام Hibernate طراحی کرده است که از این استاندارد تبعیت می کند.
یا بنیاد Eclipse پیاده سازی این استاندارد را با نام EclipseLink انجام داده است.
پیاده سازی دیگری از بنیاد Apache با این نام وجود دارد که نام آن Open JPA می باشد.
در نظر داشته باشید که هیچ الزامی برای تبعیت از این استاندارد وجود ندارد اما بهتر است که از این استاندارد تبعیت شود.
شما برای استفاده از Hibernate می توانید از Interfaceهای JPA استفاده کنید و به صورت استاندارد کد بزنید و برنامه بنویسید ویا می تواند از این Interfaceها استفاده نکنید! و از Interfaceهای دیگر Hibernate به نام Hibernate native استفاده کنید.
این که از کدام Interfaceها استفاده شود بیشتر سلیقه ای می باشد. اما در نظر داشته باشید که اگر از Interfaceهای JPA استفاده کنید بنا به هر دلیلی می توانید با کم ترین تغییرات به دیگر پیاده سازی های JPA مانند EclipseLink یا Open JPA مهاجرت کنید. از طرف دیگر در نظر داشته باشید که استفاده از کتابخانه Hibernate به صورت Hibernate native به شما قابلیت ها و انعطاف پذیری های بیشتری می دهد.
و در آخر باید به این نکته اشاره کنم که توسعه جاوا به همین صورت به پیش می رود. یعنی ابتدا برای هر کاری یک استاندارد تعریف می شود و شرکت های مختلف آن استانداردها را پیاده سازی می کنند.