Есть ли в спецификации JPA или официальных документах какие-либо заявления о некоторых реализациях JPA, которые описывают поведение, когда мы аннотируем методы сущности и когда мы аннотируем поля сущности?
Всего несколько часов назад я столкнулся с ужасной проблемой:Я использую JPA (через Hibernate, но без каких-либо специфичных для Hybernate в Java-коде) с MS SQL Server.И я разместил все аннотации на полях сущностей (я предпочитал этот стиль до сегодняшнего дня).
Когда я посмотрел на БД, я обнаружил, что все столбцы таблицы, которые должны быть первичными ключами и которые должны содержать некоторые целые числа (идентификаторы), на самом деле имели тип varbinary(255, null)
и содержали хэши чего-либо (я не знаючто это было, но это выглядело как типичный хеш MD5).
Самое разочарованное в том, что приложение работало правильно.Но иногда (при обновлении) я получал исключение MS SQL, в котором говорилось, что я пытался вставить слишком длинные значения и данные не могут быть усечены.
В конечном итоге (в качестве эксперимента) я удалил все аннотации из полей сущностей и поместил всеих на методы.Я воссоздал БД, и все таблицы содержали идеальный столбец FK.И в этих столбцах хранятся целые числа (идентификаторы, например, 1, 3, 4 ...).
Итак, кто-нибудь может объяснить, что это было?
Я нашел этот SO поток и принятый ответ говорит, что предпочтительным способом является размещение аннотаций на полях.По крайней мере, для моего конкретного случая я могу сказать, что это не так.