Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Object references an unsaved transient instance - save the transient instance before flushing hibernate JPA [duplicate]

When I try to save the data this error is shown:

com.LTR.entity.Silicon.platform -> com.LTR.entity.Platform,

It says that I need to save the transient.

I have been trying to put cascadeType.ALL but this does not work.

@Entity
@Table(name="silicon",uniqueConstraints={@UniqueConstraint(columnNames = {"silicon_visual_id"})})
@EnableTransactionManagement
@DynamicUpdate
public class Silicon implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="id", unique = true, nullable = false)
    private Long id;

    @Column(name="mir", unique = false, nullable = true)
    private Long mir;

    @Column(name = "silicon_name", nullable = false, length= 45)
    private String siliconName;

    @Column(name = "type_silicon", nullable = false, length= 45)
    private String typeSilicon;

    @Column(name = "qdf", nullable = true, length= 45)
    private String qdf;

    @Column(name = "silicon_visual_id", nullable = false, length= 45)
    private String siliconVisualId;

    @Column(name = "cpu_id", nullable = true, length= 45)
    private String cpuId;

    @Column(name = "stepping", nullable = true, length= 45)
    private String stepping;

    @Column(name = "socket", nullable = true, length= 45)
    private String socket;

    @Column(name = "status_silicon", nullable = false,length= 45)
    private String statusSilicon;

    @JsonIgnore
    @ManyToOne(fetch=FetchType.EAGER)
    @JoinColumn(name="user_owner", nullable = false)
    private User userOwner;

    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @Column(name = "date_admission", nullable = false)
    private Date dateAdmission;

    @JsonIgnore
    @ManyToOne(fetch=FetchType.EAGER)
    @JoinColumn(name="user_request", nullable = true)
    private User userRequest;

    @JsonIgnore
    @ManyToOne(fetch=FetchType.EAGER)
    @JoinColumn(name="user_last_returned", nullable = true)
    private User userLastReturned;

    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @Column(name = "date_delivered", nullable = true)
    private Date dateDelivered;

    @JsonIgnore
    @ManyToOne(fetch=FetchType.EAGER)
    @JoinColumn(name="platform_current", nullable = true)
    private Platform platform;

    @JsonIgnore
    @ManyToOne(fetch=FetchType.EAGER)
    @JoinColumn(name="platform_own", nullable = true,updatable= false)
    private Platform platformOwn;

    /*GETTERS AND SETTERS*/

@Entity
@Table(name="platform")
public class Platform implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="platform_id", unique = true, nullable = false)
    private Long platformId;

    @JsonIgnore
    @ManyToOne(fetch=FetchType.EAGER)
    @JoinColumn(name="locationId", nullable = false)
    private Location location;

    @Enumerated(EnumType.STRING)
    @JoinColumn(name="businessUnit", nullable = true)
    private BusinessUnit businessUnit;

    @Column(name = "name", nullable = false, length= 45,unique = true)
    private String name;

    @Column(name = "project", nullable = false, length= 45)
    private String project;

    @Column(name = "serialPlatform", nullable = false, length= 45, unique 
        = true)
    private String serialPlatform;

    @Column(name = "model", nullable = false, length= 45)
    private String model;

    @Column(name = "chasisSerial", nullable = false, length= 45)
    private String chasisSerial;

    @Column(name = "chasisModel", nullable = false, length= 45)
    private String chasisModel;

    @Column(name = "ismpKitName", nullable = false, length= 45)
    private String ismpKitName;

    @Column(name = "ismpSerialNumber", nullable = false, length= 45)
    private String ismpSerialNumber;

    @Column(name = "assignedTo", nullable = false, length= 45)
    private String assignedTo;

    @Column(name = "OwnedBy", nullable = false, length= 45)
    private String OwnedBy;

    @Column(name = "ismNumber", nullable = false, length= 45)
    private int ismNumber;

    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @Column(name = "receivedDate", nullable = false)
    private Date receivedDate;

    @Column(name = "asset", nullable = false, length= 45)
    private int asset;

    @Column(name = "startStatus", nullable = false, length= 45)
    private boolean startStatus;

    @Column(name = "finalStatus", nullable = false, length= 45)
    private boolean finalStatus;

    @Column(name = "cloudReady", nullable = false, length= 45)
    private boolean cloudReady;

    @OneToMany(mappedBy="platform")
    private List<Annotation> annotations;

    @OneToMany(fetch = FetchType.LAZY,cascade = CascadeType.ALL, mappedBy 
        = "platform")
    private Set<Silicon> userRole = new HashSet<Silicon>();

    @OneToOne(fetch = FetchType.LAZY, mappedBy = "platform")
    private Host Host;

    /*GETTERS AND SETTERS*/

org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : com.LTR.entity.Silicon.platform -> com.LTR.entity.Platform; nested exception is java.lang.IllegalStateException: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : com.LTR.entity.Silicon.platform -> com.LTR.entity.Platform
2019-09-09 08:32:43.161 ERROR 21968 --- [nio-8081-exec-9] o.h.i.ExceptionMapperStandardImpl        : HHH000346: Error during managed flush [org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : com.LTR.entity.Silicon.platform -> com.LTR.entity.Platform]
2019-09-09 08:32:43.172  INFO 21968 --- [nio-8081-exec-9] com.LTR.controller.SiliconController     : org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : com.LTR.entity.Silicon.platform -> com.LTR.entity.Platform; nested exception is java.lang.IllegalStateException: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : com.LTR.entity.Silicon.platform -> com.LTR.entity.Platform
2019-09-09 09:25:45.500  WARN 8000 --- [nio-8081-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 1048, SQLState: 23000
2019-09-09 09:25:45.500 ERROR 8000 --- [nio-8081-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper   : Column 'owned_by' cannot be null
2019-09-09 09:25:45.506 ERROR 8000 --- [nio-8081-exec-1] o.h.i.ExceptionMapperStandardImpl        : HHH000346: Error during managed flush [org.hibernate.exception.ConstraintViolationException: could not execute statement]
2019-09-09 09:25:45.517  INFO 8000 --- [nio-8081-exec-1] com.LTR.controller.SiliconController     : org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement

I dont know why when i tried to update or insert this crashed with this error , and also this only happens when the platform object is null when i try to update

when i set cascadeType.ALL it sasys that the ownedBy from the platform entity is empty but in the database is no empty

like image 888
Justin Zuñiga Torres Avatar asked Aug 30 '25 18:08

Justin Zuñiga Torres


1 Answers

You need to save Platform before saving Silicon so Persist is the CascadeType you would need here.

@JsonIgnore
@ManyToOne(fetch=FetchType.EAGER, cascade = CascadeType.PERSIST)
@JoinColumn(name="platform_current", nullable = true)
private Platform platform;

Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!