Эти аннотации являются "стандартными" аннотациями ejb3.
Hibernate - это конкретный используемый ORM (он будет использовать «стандартные» аннотации)
Spring предоставляет соединение JDBC, которое использует Hibernate.
Для получения более подробной информации о том, что делает каждая из этих трех компонентов, я бы посоветовал вам посетить их соответствующие проекты и прочитать их документацию. Это слишком много для SO.