Я пытаюсь запустить проект весенней загрузки с базой данных MySQL, но у меня есть проблема с базой данных. Я пытаюсь запустить свое приложение, и сервер работает, но спящий режим не создает таблицы и т. д.
Это мой код:
Пользовательская сущность
@Entity
public class User {
@Id
@GeneratedValue(strategy = IDENTITY)
private Long id;
private String firstName;
private String lastName;
private String email;
private String password;
private String description;
private String profile_photo;
private LocalDate create;
private LocalDate update;
@OneToMany(mappedBy = "eventOwner")
private List<Event> ownedEvents;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getProfile_photo() {
return profile_photo;
}
public void setProfile_photo(String profile_photo) {
this.profile_photo = profile_photo;
}
public LocalDate getCreate() {
return create;
}
public void setCreate(LocalDate create) {
this.create = create;
}
public LocalDate getUpdate() {
return update;
}
public void setUpdate(LocalDate update) {
this.update = update;
}
public List<Event> getOwnedEvents() {
return ownedEvents;
}
public void setOwnedEvents(List<Event> ownedEvents) {
this.ownedEvents = ownedEvents;
}}
Сущность события
@Entity
@Table(name = "events")
public class Event {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private Double longitude;
private Double latitude;
private String description;
private String header;
private LocalDate startData;
private LocalDate endData;
private LocalDate creat;
private LocalDate update;
private Filters filters;
@ManyToOne
@JoinColumn(name = "owner_id")
private User eventOwner;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Double getLongitude() {
return longitude;
}
public void setLongitude(Double longitude) {
this.longitude = longitude;
}
public Double getLatitude() {
return latitude;
}
public void setLatitude(Double latitude) {
this.latitude = latitude;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getHeader() {
return header;
}
public void setHeader(String header) {
this.header = header;
}
public LocalDate getStartData() {
return startData;
}
public void setStartData(LocalDate startData) {
this.startData = startData;
}
public LocalDate getEndData() {
return endData;
}
public void setEndData(LocalDate endData) {
this.endData = endData;
}
public LocalDate getCreat() {
return creat;
}
public void setCreat(LocalDate creat) {
this.creat = creat;
}
public LocalDate getUpdate() {
return update;
}
public void setUpdate(LocalDate update) {
this.update = update;
}
public Filters getFilters() {
return filters;
}
public void setFilters(Filters filters) {
this.filters = filters;
}
public User getEventOwner() {
return eventOwner;
}
public void setEventOwner(User eventOwner) {
this.eventOwner = eventOwner;
}
}
И это мои свойства:
spring.datasource.url= jdbc:mysql://localhost:3306/some_database?
requireSSL=false&useSSL=false
spring.datasource.username= user
spring.datasource.password= passw
logging.level.org.hibernate.SQL= DEBUG
spring.jpa.hibernate.ddl-auto = create-drop
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL55Dialect
Это ошибка, которую я получаю
org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing
DDL "alter table events drop foreign key FKg0mkvgsqn8584qoql6a2rxheq" via
JDBC Statement
и
org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing
DDL "create table events (id bigint not null auto_increment, creat date,
description varchar(255), end_data date, event_type integer, max_age
integer not null, min_age integer not null, open_to_changes bit not null,
pets_allowed bit not null, price_range integer, smoking_allowed bit not
null, header varchar(255), latitude double precision, longitude double
precision, start_data date, update date, owner_id bigint, primary key (id))
engine=InnoDB" via JDBC Statement
at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.tool.schema.internal.SchemaCreatorImpl.applySqlString(SchemaCreatorImpl.java:440) [hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.tool.schema.internal.SchemaCreatorImpl.applySqlStrings(SchemaCreatorImpl.java:424) [hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.tool.schema.internal.SchemaCreatorImpl.createFromMetadata(SchemaCreatorImpl.java:315) [hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.tool.schema.internal.SchemaCreatorImpl.performCreation(SchemaCreatorImpl.java:166) [hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:135) [hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:121) [hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:155) [hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:72) [hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:310) [hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:467) [hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:939) [hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:57) [spring-orm-5.1.4.RELEASE.jar:5.1.4.RELEASE]
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) [spring-orm-5.1.4.RELEASE.jar:5.1.4.RELEASE]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:390) [spring-orm-5.1.4.RELEASE.jar:5.1.4.RELEASE]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:377) [spring-orm-5.1.4.RELEASE.jar:5.1.4.RELEASE]
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341) [spring-orm-5.1.4.RELEASE.jar:5.1.4.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1804) [spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1741) [spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:576) [spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498) [spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) [spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) [spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) [spring-beans-5.1.4.RELEASE.jar:5.1.4.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1083) ~[spring-context-5.1.4.RELEASE.jar:5.1.4.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:853) ~[spring-context-5.1.4.RELEASE.jar:5.1.4.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:546) ~[spring-context-5.1.4.RELEASE.jar:5.1.4.RELEASE]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:142) ~[spring-boot-2.1.2.RELEASE.jar:2.1.2.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775) ~[spring-boot-2.1.2.RELEASE.jar:2.1.2.RELEASE]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) ~[spring-boot-2.1.2.RELEASE.jar:2.1.2.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:316) ~[spring-boot-2.1.2.RELEASE.jar:2.1.2.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260) ~[spring-boot-2.1.2.RELEASE.jar:2.1.2.RELEASE]
Кто-нибудь знает, как это исправить?
@Deadpool да, и у меня есть эта проблема




Измените spring.jpa.hibernate.ddl-auto = создание-удаление на Обновить. Он удаляет базу данных при запуске, поэтому не найдет требуемую таблицу событий, чтобы что-либо изменить.
Перешел с create-drop на create, и у меня это сработало.
для получения дополнительной информации о ddl-auto я нашел этот ответ полезным: stackoverflow.com/a/1689769/4265546
эй, не могли бы вы объяснить, как это сработало для такого исключения?
В моем случае проблема, из-за которой я получил это исключение, заключалась в том, что некоторые таблицы имели имена, зарезервированные для postgreSQL. например. «Нравится» или «Пользователь». Изменено имя с:
@Table(name = "likes")
и это работало нормально. Возможно у кого-то такая же проблема.
Была такая же проблема - все исправлено, спасибо!
Спасибо! это тоже решило мою проблему. О, проблема с попыткой интерпретировать то, что хочет сделать ORM. Вещи всегда кажутся «теряемыми при переводе».
Эта аннотация исходит от Hibernate или от Javax.Persistence? Я предполагаю Javax.Persistence, так как все остальные тоже оттуда.
Хм, я тоже столкнулся с этой проблемой, но ни одно из этих решений не помогло решить мою проблему. Я использую упаковку базы данных MySQL с XAMPP. Что я пытался решить, но не смог
Итак, что я сделал, чтобы решить эту проблему. Может быть твоим
Друзья, это на самом деле мои обстоятельства, возможно, они помогут вам в вашей проблеме, как я. Если у вас есть какие-либо вопросы, пожалуйста, оставьте комментарий. Спасибо
Изменить диалект hibernate.cfg.xml Диалект: - org.hibernate.dialect.MySQL5InnoDBDialect ИЛИ org.hibernate.dialect.MySQL55Dialect ИЛИ org.hibernate.dialect.MySQL55InnoDBDialect ИЛИ org.hibernate.dialect.MySQL57InnoDBDialect
Хорошо, была такая же проблема. Добавление префиксов устранило проблему для меня:
от:
`
@Entity
@Table(name = "result_man")
@Proxy(lazy = false)
public class ResultManEntity {
@Id
@GeneratedValue
@Column(name = "id", unique = true, length = 128)
private long id;
private String key;
private int score;
private int index;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "result_id")
private ResultEntity result;
}`
к:
`@Entity
@Table(name = "result_man")
@Proxy(lazy = false)
public class ResultManEntity {
@Id
@GeneratedValue
@Column(name = "id", unique = true, length = 128)
private long id;
private String _key;
private int _score;
private int _index;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "result_id")
private ResultEntity result;`
Просто укажите диалект в вашем application.properties. Например, для MySQL 8:
hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
Столкнулся с похожей проблемой и нашел ответ SupaMario здесь.
В моем случае у меня была таблица с именем orders, но MySql выдал ошибку, поскольку она кажется резервной таблицей/ключевым словом.
Поменял на customer_order и все заработало.
Кажется, это ошибка, связанная со словами сдержанный PostgreSQL. Как и в верхнем ответе (SupaMario), ошибка исчезла после изменения одного из имен моих столбцов с
@Column(name = "name", nullable = false)
к
@Column(name = "employee_name", nullable = false)
если вы видите эту проблему, дважды проверьте свойства вашего класса на наличие зарезервированных ключевых слов, таких как ключ (в моем случае).
Поменял ключ на mkey и все нормально.
Для тех, кто работает с PostgreSQL и имеет ту же проблему, даже если имена ваших таблиц не являются ключевыми словами, поместите строку ниже в файл application.properties. Это сработало для меня.
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
В моем случае у меня была ошибка, когда я сделал это в определенном свойстве объекта
@Column(name = "condition", nullable = false)
я изменил это на
@Column(name = "condition_of_house", nullable = false)
И это сработало хорошо
В моем случае ошибка произошла из-за того, что у пользователя mysql нет привилегии REFERENCES.
Чтобы решить это;
или вам просто нужно предоставить привилегии REFERENCES для 'your_user'@'localhost'
См. документацию: https://dev.mysql.com/doc/refman/8.0/en/grant.html
В моем случае помогло удаление таблиц из базы. НО, ВНИМАНИЕ, ЭТО БЫЛ ОБУЧАЮЩИЙ ПРОЕКТ :)
В моем случае проблема, из-за которой я получил это исключение, заключалась в том, что некоторые таблицы имели имена, зарезервированные для mySQL. например. "заказ" Изменено название на:
@Column(name = "orders")
или
Например
@ManyToOne(cascade = {CascadeType.ALL})
@JoinColumn(name = "fk_order",nullable = false)
private Order order;
работал на меня.
Изменить код линии в файле свойств:
форма:
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL55Dialect
К:
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
Поскольку MySQL55Dialect не создает FK . и MySQL5InnoDBDialect, создающий FK
Владелец — это зарезервированное слово для MySQL. Либо измените его, либо используйте аннотацию, чтобы использовать другое имя для forgeinkey вместо имени по умолчанию.
Ссылка: https://dev.mysql.com/doc/refman/8.0/en/keywords.html#keywords-8-0-detailed-O
Принуждение JPA к использованию пользовательского имени
@ManyToOne
@MapsId("ownerId")
@JoinColumn(
name = "owner_id",
foreignKey = @ForeignKey(
name = "fkey_own_id"
)
)
Вы пытались удалить все таблицы?