Hibernate Mappings приводит к автоматическому созданию дополнительных столбцов - Spring

0

Я столкнулся с проблемой в спящих сопоставлениях с onetomany двунаправленной.

Всякий раз, когда я запускаю приложение, он автоматически создает два столбца в таблице первичных ключей как first_name и last_name.

Я не знаю, какая именно ошибка. вот мой код, который отображает в springboot. К сожалению, весной я нахожусь на начальном уровне.

ТАБЛИЦЫ:

@Entity
@Table(name = "persons")
public class Persons {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "personid")
    int PersonID;

    @Column(name = "LastName")
    String LastName;

    @Column(name = "FirstName")
    String FirstName;

    @Column(name = "Address")
    String Address;

    @Column(name = "City")
    String City;

    @OneToMany(orphanRemoval = true, mappedBy = "persons", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    List<Person_detail> person_detail = new ArrayList<Person_detail>();
...................
..................
}

TABLE person_detail:

@Entity
@Table(name = "person_detail")
public class Person_detail {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    int id;
    @Column(name = "Address")
    String Address;
    @Column(name = "Designation")
    String Designation;

    @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinColumn(name = "person_id", referencedColumnName = "personid")
    Persons persons;
...................
.............
}

Мой файл application.properties:

spring.mvc.view.prefix=/
spring.mvc.view.suffix=.jsp

server.servlet.context-path=/testapp


spring.datasource.url=jdbc:mysql://127.0.0.1:3306/socket
spring.datasource.username=root
spring.datasource.password=roor
spring.datasource.driver-class-name=com.mysql.jdbc.Driver


spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update

Мой запрос MySql для создания таблицы:

CREATE TABLE Persons (
    PersonID int,
    LastName varchar(255),
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255) 
);

CREATE TABLE Person_detail (
    id int PRIMARY key AUTO_INCREMENT,
    Address varchar(255),
    Designation varchar(50),
   person_id int,
    FOREIGN KEY (person_id) REFERENCES persons(personid)
);

Поэтому мои данные сначала

Изображение 174551 Изображение 174551

Когда я запускаю приложение Springboot, он автоматически создает имя_имя и last_name, изменяя таблицу.

Мой logcat:

2018-06-25 20:35:15.119  INFO 6576 --- [           main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect
Hibernate: create table hibernate_sequence (next_val bigint) engine=MyISAM
Hibernate: insert into hibernate_sequence values ( 1 )
Hibernate: alter table socket.persons add column first_name varchar(255)
Hibernate: alter table socket.persons add column last_name varchar(255)

Моя таблица после запуска проекта: Изображение 174551

  • 0
    Вы случайно не смешиваете конфигурацию Java с конфигурацией XML?
  • 0
    Нет. Это вся моя конфигурация.
Показать ещё 4 комментария
Теги:
spring
hibernate
jpa

1 ответ

2
Лучший ответ

По умолчанию Spring Boot настраивает стратегию физических имен с помощью SpringPhysicalNamingStrategy. Что делает это: Например, TelephoneNumber объект отображается в telephone_number таблице (то же самое для столбцов).

Поскольку вы использовали spring.jpa.hibernate.ddl-auto=update, Spring обновит таблицу, добавив новые столбцы. В этом случае first_name для FirstName и last_name для LastName.

Если вы предпочитаете использовать Hibernate 5s по умолчанию, установите следующее свойство:

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

Подробнее см. " Настройка стратегии именования гибернации" в справочной системе Spring Boot Reference.

  • 0
    Спасибо за этот ценный ответ. Но все же проект создает Hibernate_sequence как таблицу со строкой. Является ли вышеприведенное отображение обрядом?
  • 1
    @UserLearning: Добро пожаловать. hibernate_sequence создан для поддержки AUTO_INCREMENT . Это нормально для MySQL. И отображение в порядке. Посмотрите этот вопрос - stackoverflow.com/questions/41461283/…

Ещё вопросы

Сообщество Overcoder
Наверх
Меню