Hello,
I am creating spring boot webservice for user-role system with JWT, user-role working fine but when i am trying to login and save token in table 'Refresh Token' it throw error:-
"org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.model.Role at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible"
thanks in advance.
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Table(name = "REFRESH_TOKENS")
public class RefreshToken {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String token;
private Instant expiryDate;
@OneToOne
@JoinColumn(name = "user_id", referencedColumnName = "user_id")
private User userInfo;
}
@Data
@Entity
@Table(name = "user")
public class User {
@Id
@Column(name = "user_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotEmpty(message = "username cannot be empty")
@Column(unique = true)
private String username;
@NotEmpty(message = "password cannot be empty")
private String password;
private boolean enabled;
@NotEmpty(message = "firstName cannot be empty")
private String firstName;
@NotEmpty(message = "lastName cannot be empty")
private String lastName;
@NotEmpty(message = "email cannot be empty")
@Column(unique = true)
private String email;
private String designation;
@DateTimeFormat(pattern = "dd/MM/yyyy")
@CreationTimestamp
private Date registrationDate;
@DateTimeFormat(pattern = "dd/MM/yyyy")
private Date activationDate;
@DateTimeFormat(pattern = "dd/MM/yyyy")
private Date deActivationDate;
@ManyToMany(cascade = CascadeType.REMOVE, fetch = FetchType.EAGER)
@JoinTable(name = "users_roles",
joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "user_id"),
inverseJoinColumns = @JoinColumn(name = "role_id", referencedColumnName = "role_id"))
private Set < Role > roles;
}
@Entity
@Data
@Table(name = "role")
public class Role {
@Id
@Column(name = "role_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String name;
@ManyToMany(mappedBy = "roles")
Set<User> userRole;
}