2017-02-09 14 views
0

Я сделал простое веб-приложение весны, которое выглядит как блог (есть заметки и пользователь). Во-первых, когда я использовал данные, хранящиеся в моих *** inMemoryRepository.java-файлах, интерфейсные и клиентские интерфейсы работают отлично. Теперь я пытаюсь изменить этот персонал на работу с базой данных mysql, и я застрял. Обычно я хочу загрузить все данные из этих двух баз данных.com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Неизвестный столбец '____' в 'списке полей'

Ошибка из консоли:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'note0_.author_id' in 'field list'

Console Hibernate войти:

Hibernate: 
    select 
     note0_.id as id1_0_, 
     note0_.author_id as author_i6_0_, 
     note0_.body as body2_0_, 
     note0_.date as date3_0_, 
     note0_.is_done as is_done4_0_, 
     note0_.title as title5_0_ 
    from 
     notes note0_ 

Ошибка из браузера:

There was an unexpected error (type=Internal Server Error, status=500). 
could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet 

application.properties -> я пытался с автоматическим режимом и без этой строки (#)

#spring.jpa.properties.hibernate.hbm2ddl.auto = create-drop 

Sql скрипт 'пользователи' таблица:

USE stickyNotes_db; 
DROP TABLE users; 
CREATE TABLE users 
(
id BIGINT(20), 
username VARCHAR(50), 
firstName VARCHAR(50), 
lastName VARCHAR(50), 
password VARCHAR(50), 
role VARCHAR(50) 
); 

INSERT INTO `users` (`id`, `username`, `firstName`, `lastName`, `password`, `role`) VALUES 
    (1, 'user1', 'Adam1', 'Mock1', 'pass1', 'USER'), 
    ...... ; 

сценария SQL 'Примечание' таблица:

USE stickyNotes_db; 
DROP TABLE notes; 
CREATE TABLE notes 
(
id BIGINT(20), 
author VARCHAR(50), 
title VARCHAR(100), 
body VARCHAR(500), 
date DATETIME(0), 
isDone BOOLEAN not null default 0 
); 

INSERT INTO `notes` (`id`, `author`, `title`, `body`, `date`, `isDone`) VALUES 
    (1, 'user1', 'Title1', 'Lorem ipsum.', '2017-02-08 00:00:00', 0), 
    ...... ; 

User.java

@Entity 
@Table(name = "users") 
public class User { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @Column(name = "username") 
    private String userName; 

    @Column(name = "firstName") 
    private String firstName; 

    @Column(name = "lastName") 
    private String lastName; 

    @Column(name = "password") 
    private String password; 

    @OneToMany(mappedBy = "author") 
    private Set<Note> notes = new HashSet<>(); 

    ...constructors, getters/setters 

Note.java

@Entity 
@Table(name = "notes") 
public class Note { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @ManyToOne(optional = false, fetch = FetchType.LAZY) 
    private User author; 

    @Column(name = "title") 
    private String title; 

    @Column(name = "body") 
    private String body; 

    @Column(name = "date") 
    private Date date = new Date(); 

    @Column(name = "isDone") 
    private boolean isDone; 

    ...constructors, getters/setters 

NoteDAO.java

@Repository 
public interface NoteDAO extends JpaRepository<Note, Long> { 

    @Query("FROM Note") 
    Page<Note> findAll(Pageable pageable); 

} 

UserDAO.java

@Repository 
public interface UserDAO extends JpaRepository<User, Long> { 

} 

ответ

1

Ваш запрос Hibernate говорит, что

note0_.author_id as author_i6_0_, 

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

Неправильная схема вашей базы данных и не соответствует вашим конфигурациям спящего режима.

INSERT INTO `notes` (`id`, `author`, `title`, `body`, `date`, `isDone`) VALUES 
    (1, 'user1', 'Title1', 'Lorem ipsum.', '2017-02-08 00:00:00', 0), 
    ...... ; 
INSERT INTO `users` (`id`, `username`, `firstName`, `lastName`, `password`, `role`) VALUES 
    (1, 'user1', 'Adam1', 'Mock1', 'pass1', 'USER'), 
    ...... ; 

В выше, ваш author должен быть author_id и содержать id таблицы пользователей.