1) Only if the DB column name differs from the entity attribute name you have to provide @Column.
2) You need to transform the data sent via HTTP and populate the JPA entities accordingly. This happens in the Web layer Controllers usually.
3) EntityManagerFactory is needed if you use the JPA interface. If you already use the Hibernate native API, then you don't need JPA since you can get access to all Hibernate functionalities via the native API.
4) You can use any web server or application server you want. Hibernate is just a library that
can work even for batch processing tasks.