I'm using Spring Boot + Spring Data and setting up entity classes to model the database tables.
A user can only be associated to one application but an application could have many users.
I am getting the following error when running an integration test that attepts to save a user:
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
Database Schema
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)
);
Application.java
@Entity
@Table(name="applications")
public class Application {
@Id
@GeneratedValue
private Long id;
private String name;
public Application() { super(); }
// getters and setters omitted
}
Users.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
}