 <p>The JoinColumn annotation is not mandatory. I am not sure why so many tutorials use this annotation since it only overrides the default behaviour. When they do not like the default generated name a custom naming strategy would be the better choice. </p> <p>To keep it short:</p> <ol> <li>There is not JoinColumn annotation, because its optional and someone has decided not to use it. Maybe he wants the default behaviour.</li> <li>TargetEntity is only necessary if the related entity is different than the one in the model. (Maybe another implementation of a class)</li> </ol>