If I remember correctly, Hibernate doesn’t let you mix and match annotation in conjunction with field / getter. If your @Id annotation is set over a field, all your mappings should follow fields. Try moving @OneToMany from
@JoinColumn(name="INVOICE_ID", nullable=false)getInvoices() to private Set<Invoice> invoices; This pattern should be applied to your Invoice class as well