Документирую это здесь, потому что я только что потратил час, пытаясь разобраться в этом.
У меня есть сущность Foo с:
@ManyToOne(optional = false)
@JoinColumn(name = "barId")
private Bar bar;
Почему Hibernate не создает ограничение внешнего ключа на foo.bar -> bar.id ?