Я новичок в 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.
Как сказано в вашей цитате: "[...] имя таблицы получено из имени класса сущностей [...], столбцы таблицы получены из переменных сущностей [...]"
Спецификация JPA определяет точные правила для алгоритмов получения имен. Spring не имеет к этому никакого отношения: все делает реализация JPA. Spring Boot, с другой стороны, по умолчанию настраивает Hibernate со своей собственной стратегией именования, которую он предпочитает стандартной.
Хорошо, в этом случае имя моего класса сущностей должно быть точно таким же, как имя таблицы. Понял Спасибо за ответ. : ПОДОБНО
Нет. Вовсе нет. Имя класса сущности должно быть лучшим именем, которое вы можете придумать для своей сущности, и соблюдать соглашения об именах классов Java. Если алгоритм вывода для этого хорошего имени класса не дает нужного вам имени таблицы, вам просто нужно использовать аннотацию @Table, чтобы указать конкретное имя таблицы.




Как вы задали свой вопрос в контексте Spring Boot. Есть два варианта, которые определяют стратегию именования:
spring.jpa.hibernate.naming.implicit-strategy
Этот параметр используется для определения имен, когда мы не указываем имена таблиц и столбцов явно в определении объекта.
Обычно это значение по умолчанию: ImplicitNamingStrategyJpaCompliantImpl
Еще реализации.
spring.jpa.hibernate.naming.physical-strategy
Это более настраиваемый, подключаемый стратегический контракт для применения правил физического именования для имен объектов базы данных.
По умолчанию используется SpringPhysicalNamingStrategy, где все точки в верблюжьем регистре заменены символами подчеркивания. Кроме того, имена таблиц генерируются в нижнем регистре.
Как указано в заявлении, они получают его от имени вашего класса. Если имя вашего класса — Users, они считают имя вашей таблицы пользователями в соответствии с нотацией верблюжьего регистра.