Я столкнулся с проблемой в спящих сопоставлениях с 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)
);
Поэтому мои данные сначала
Когда я запускаю приложение 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)
Моя таблица после запуска проекта:
По умолчанию 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.
hibernate_sequence
создан для поддержки AUTO_INCREMENT
. Это нормально для MySQL. И отображение в порядке. Посмотрите этот вопрос - stackoverflow.com/questions/41461283/…