Двунаправленное отображение не работает, поскольку оно не сохраняется правильно - PullRequest
0 голосов
/ 10 октября 2019

Я новичок в Spring и тестирую API на почтальоне, а Instructor_id не сохраняется. Вот как я тестирую его на почтальоне и не знаю, правильно ли это.

{ 
    "coursename":"tesasdasdast",
    "description":"tesdasdsadasting",
    "userEntity":{ 
        "instructor_id":1
    }
}

Шаги:

У меня есть две сущности: UserEntity CourseEntity

У меня есть контроллер, в котором я сохраняю информацию: CourseController

У меня есть хранилище с именем CourseRepo, и я расширяю JpaRepository

В CourseEntity:

@ManyToOne
@JoinColumn(name = "instructor_id")
private UserEntity userEntity;

В UserEntity:

@OneToMany(mappedBy = "userEntity", cascade=CascadeType.ALL)
private List<CourseEntity> courseEntity;

В моем CourseController:

@PostMapping("/courses")
void addCourse(@RequestBody CourseEntity course) {
    courseRepository.save(course);
}

Я добавил в свой pom.xml:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
</dependency>

Это сообщение об ошибке, которое яНахожусь в почтальоне:

{
    "timestamp": "2019-10-10T16:51:47.780+0000",
    "status": 500,
    "error": "Internal Server Error",
    "message": "org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : com.finaly.projectback.entity.CourseEntity.userEntity -> com.finaly.projectback.entity.UserEntity; nested exception is java.lang.IllegalStateException: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : com.finaly.projectback.entity.CourseEntity.userEntity -> com.finaly.projectback.entity.UserEntity",
    "path": "/project/courses"
}

И вот эти две таблицы в базе данных:

create table web_user(
    id INT primary key auto_increment,
    firstname VARCHAR(50),
    lastname VARCHAR(50),
    username VARCHAR(50),
    email VARCHAR(50),
    pwd VARCHAR(50),
    user_role_id INT,
    FOREIGN KEY (user_role_id) REFERENCES web_user_role(id)
);

CREATE TABLE web_course (
    id INT PRIMARY KEY AUTO_INCREMENT,
    coursename VARCHAR(50),
    instructor_id INT,
    FOREIGN KEY (instructor_id) REFERENCES web_user(id)
);

Заранее благодарю за любой совет.

Ответы [ 2 ]

0 голосов
/ 12 октября 2019

Я нашел свою ошибку. Вместо того чтобы создавать внешний ключ как user_entity_user_id, я создавал его как user_id.

Это кажется глупой ошибкой, но я все еще новичок в Spring, и на данный момент многие вещи выглядят как волшебство.

Спасибо всем, кто пытался помочь.

0 голосов
/ 11 октября 2019

Пожалуйста, проверьте, правильно ли вы устанавливаете сущности в ассоциации. userEntity.setCourseEntity и courseEntity.setUserEntity

У вас есть этот код на месте, а затем проверьте свои спящие запросы, которые запускаются при вызове метода save.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...