Мне нужно написать приложение в Java EE6. Мне предоставлена база данных MySQL, на которую мне не разрешено вносить какие-либо изменения. База данных хорошо структурирована и нормализована, но не имеет внешних ключей, определенных для обеспечения целостности. (Он использует механизм MyISAM).
Можно ли определить отношения (используя @JoinColumn, @ManyToOne и т.д.) в классах сущностей JPA без определения внешних ключей в базе данных?
База данных хорошо структурирована, но не имеет никаких отношений (внешних ключей). (Он использует механизм MyISAM).
Внешние ключи используются для проверки и обеспечения ссылочной целостности, а не для объединения таблиц. Другими словами, использование таблиц MyISAM не мешает таблицам иметь отношения между ними.
Можно ли определить отношения (используя @JoinColumn, @ManyToOne и т.д.) в классах сущности JPA, фактически не имея их в базе данных?
Пока существуют такие отношения (независимо от того, что FK обеспечивает их целостность), вы можете использовать их для сопоставления своих объектов.
Что вы подразумеваете под "отношениями" в базе данных? Если вы просто имеете в виду ограничения внешнего ключа (т.е. У вас есть значения внешнего ключа, но нет ограничений), тогда вам не нужны те, которые определяют отношения в JPA, просто используйте значения внешнего ключа.
Если у вас просто плоская таблица, в которой ничего не связано с ними, тогда вы не можете многое сделать, вам нужны данные, относящиеся к таблицам. Если вы можете хотя бы создать новые таблицы, вы можете использовать отношения JoinTable для связывания таблиц.