Ahora pasemos a analizar las propiedades que nos brinda @JoinColumn :
name:
Indica el nombre con el que se deberá de crear la columna dentro de la tabla.
referencedColumnName:
Se utiliza para indicar sobre que columna se realizará el Join de la otra tabla. Por lo general no se suele utilizar, pues JPA asume que la columna es el ID de la Entidad objetivo.
unique:
Crea un constraints en la tabla para impedir valores duplicados (default false).
nullable:
Crea un constraints en la tabla para impedir valores nulos (default true).
insertable:
Le indica a JPA si este valor deberá guardarse en la operación de inserción (default true)
updatable:
Le indica a JPA si el valor deberá actualizarse durante el proceso de actualización (default true)
columnDefinition:
Esta propiedad es utiliza para indicar la instrucción SQL que se deberá utilizar la crear la columna en la base de datos. Esta nos ayuda a definir exactamente como se creará la columna sin depender de la configuración de JPA.
table:
Le indicamos sobre que tabla deberá realizar el JOIN, normalmente no es utilizada, pues JPA asume la tabla por medio de la entidad objetivo.
foreignKey:
Le indica a JPA si debe de crear el Foreign Key, esta propiedad recibe uno de los siguientes valores CONSTRAINT , NO_CONSTRAINT , PROVIDER_DEFAULT definidos en la enumeración javax.persistence.ForeignKey .