Pues Spring JPA e hibernate lo que hace es crear una capa de datos inferior a tu proyecto encargado de comunicarse con tu db final, una de las grandes ventajas es que jamas haces consultas sql sino que utilizas anotaciones de sql estandar y manipulas objetos a modo de DTO, esto permite que puedas cambiar de driver facilmente sin tener que hacer cambios en tu aplicación, por ejemplo, puedes migrar de mysql a oracle, postgre, sql server, etc. A demás de esto crea un almacen en memoria para optimizar la carga de las consultas SQL entre muchas otras ventajas.
Las anotaciones ManyToOne indican la relación que tendrán dos tablas de muchos a uno, eso quiere decir que se creará una columna adicional con el id de la fila, por eso se declara en @JoinColumn.
Es posible crear joins manualmente pero debes utilizar una sintaxis especial que es única de spring:
https://www.baeldung.com/spring-data-jpa-query , donde haces consultas a objetos de tu proyecto en ves de tablas y columnas.
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#referenceEl que sabe mucho mas que yo de este tema es Octalh, lo podrás encontrar en el grupo de telegram de elhacker.net
Saludos.