Я использую Spring Boot + Spring Data и настраиваю классы сущностей для моделирования таблиц базы данных.
Пользователь может быть связан только с одним приложением, но приложение может иметь много пользователей.
При выполнении интеграционного теста, который спасает пользователя, появляется следующая ошибка:
org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.de,p.model.Application; nested exception is java.lang.IllegalStateException: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.demo.model.Application
Схема базы данных
CREATE TABLE applications (
id int IDENTITY(1,1) NOT NULL,
name varchar(30) NOT NULL UNIQUE,
CONSTRAINT PK_Applications PRIMARY KEY (id)
);
INSERT INTO applications (name)
VALUES ('demo');
CREATE TABLE users (
id int IDENTITY(1,1) NOT NULL,
username varchar(20) NOT NULL UNIQUE,
password varchar(128) NOT NULL,
disabled tinyint NOT NULL DEFAULT 0,
application_id int NOT NULL,
description varchar(255),
CONSTRAINT PK_Users PRIMARY KEY (id),
CONSTRAINT FK_Users_ApplicationId FOREIGN KEY (application_id) REFERENCES applications (id)
);
Приложение. java
@Entity
@Table(name="applications")
public class Application {
@Id
@GeneratedValue
private Long id;
private String name;
public Application() { super(); }
// getters and setters omitted
}
Пользователи. java
@Entity
@Table(name="users")
public class User {
@Id
@GeneratedValue
private Long id;
private String username;
private String password;
private String description;
private boolean disabled;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "application_id", referencedColumnName = "id")
private Application application;
public User() {
super();
}
// getters and setters omitted
}