Почему аннотация @Table не является обязательной в операции CRUD через spring

Я новичок в spring и spring-boot, и во время изучения Spring CRUD я просматривал разные статьи и видел эти строки.

"And why @Entity annotation is mandatory? … well, it is the way how JPA is designed. When you create a new entity you have to do at least two things annotated it with @Entity create an id field and annotate it with @Id Anything else is optional, for example, the table name is derived from entity class name (and therefore @Table annotation can be optional), table’s columns are derived from entities variables (and therefore @Column annotation can be optional), and so on …"

Итак, мой вопрос заключается в том, как Spring раздвоит таблицы и имена их столбцов, если мы не предоставим аннотацию @Table и аннотации @Column.

Как указано в заявлении, они получают его от имени вашего класса. Если имя вашего класса — Users, они считают имя вашей таблицы пользователями в соответствии с нотацией верблюжьего регистра.

Vimukthi 05.06.2019 07:53

Как сказано в вашей цитате: "[...] имя таблицы получено из имени класса сущностей [...], столбцы таблицы получены из переменных сущностей [...]"

Robby Cornelissen 05.06.2019 07:55

Спецификация JPA определяет точные правила для алгоритмов получения имен. Spring не имеет к этому никакого отношения: все делает реализация JPA. Spring Boot, с другой стороны, по умолчанию настраивает Hibernate со своей собственной стратегией именования, которую он предпочитает стандартной.

JB Nizet 05.06.2019 08:02

Хорошо, в этом случае имя моего класса сущностей должно быть точно таким же, как имя таблицы. Понял Спасибо за ответ. : ПОДОБНО

Tirth Timaniya 05.06.2019 08:04

Нет. Вовсе нет. Имя класса сущности должно быть лучшим именем, которое вы можете придумать для своей сущности, и соблюдать соглашения об именах классов Java. Если алгоритм вывода для этого хорошего имени класса не дает нужного вам имени таблицы, вам просто нужно использовать аннотацию @Table, чтобы указать конкретное имя таблицы.

JB Nizet 05.06.2019 08:07
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
1 043
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как вы задали свой вопрос в контексте Spring Boot. Есть два варианта, которые определяют стратегию именования:

spring.jpa.hibernate.naming.implicit-strategy

Этот параметр используется для определения имен, когда мы не указываем имена таблиц и столбцов явно в определении объекта.

Обычно это значение по умолчанию: ImplicitNamingStrategyJpaCompliantImpl

Еще реализации.

spring.jpa.hibernate.naming.physical-strategy

Это более настраиваемый, подключаемый стратегический контракт для применения правил физического именования для имен объектов базы данных.

По умолчанию используется SpringPhysicalNamingStrategy, где все точки в верблюжьем регистре заменены символами подчеркивания. Кроме того, имена таблиц генерируются в нижнем регистре.

Другие вопросы по теме