We can think of
@ManyToOne as the
"one" side of a
@OneToMany/@ManyToOne relationship pair.
As such it is the side that maps to the foreign key column(s).
@Entity public class Contact ... // maps to "customer_id" foreign key column @ManyToOne Customer customer; ...
If the foreign key column does not match the naming convention based on the property name + "_id" then we need to define a @JoinColumn.
@Entity public class Contact ... // explicit @JoinColumn of "cust_id" as the foreign key column @ManyToOne @JoinColumn("cust_id") Customer customer; ...
If the underlying foreign key should have a NOT NULL constraint then we specify
@Entity public class Contact ... // not null constraint as optional=false @ManyToOne(optional=false) Customer customer; ...
We can use javax validation
@NotNull instead of
optional=false to define
that the underlying foreign key column has a NOT NULL constraint.
@Entity public class Contact ... // @NotNull same as optional=false @NotNull @ManyToOne Customer customer; ...