The @ManyToOne associations are optional by default, so you don’t need to set anything if you want them to be nullable.
However, because you set the optional=false attribute, you made it mandatory.
So instead of:
@ManyToOne(optional = false, fetch = FetchType.LAZY)
Set it like this:
@ManyToOne(fetch = FetchType.LAZY)
The optional is true by default.
On the other hand, the @Column(nullable=true) is to instruct the DDL generation tool to include a NULL SQL column type constraint.