@Version sirve para verificar si hubo una modificación concurrente de un registro.
Cada vez que hacés un update de un registro con @version se actualiza el número de versión, y al momento de hacer un update java comprueba que el número en la base sea igual al número en el objeto que pasaste para hacer el update, si no son iguales no te deja modificar los datos.
Con un ejemplo por ahi se entiende mejor:
Supongamos una tabla de clientes y dos usuarios A y B.
A pide los datos de un cliente para modificarlos, recibe todos los datos y el número de versión, digamos 1.
Mientras A modifica los datos B los pide también, con versión 1, porque A todavía no lo guardó.
B es más rápido que A y guarda antes de que A termine, en ese caso se incrementa la versión, a 2.
Cuando A va a guardar se comparan las versiones, la del objeto cliente de A con la de la BB. DD., como en la base es mayor se lanza una excepción (OptimisticLockException si no me equivoco) y no se actualizan los datos.
@Basic te la debo, nunca la usé.
Espero que se haya entendido.
Saludos.