休眠错误消息:刷新前保存临时实例



在尝试创建一对多关系时,我正在处理"在刷新之前保存瞬态实例";错误消息usingn Spring JPA连接到PostgreSQL。"Alquiler";(一(是我的实体的名称,另一个是";Pelillas";(对许多人(

注意,我已经添加了cascade=CascadeType.ALL,但仍然存在问题。这是我试图创建关系的类。帮助

package com.Project.Movies.model;
import java.util.Date;
import java.util.List;
import javax.persistence.*;
@Entity
@Table(name = "Alquiler")
public class Alquiler {
@Id
@SequenceGenerator(
name = "alquiler_seq",
sequenceName = "alquiler_seq",
allocationSize = 1
)
@GeneratedValue(
strategy = GenerationType.SEQUENCE,
generator = "alquiler_seq"
)
private Long id;
int dias;
float costopordia;
String formapago;
Date fechaAlquiler;
@Column
@ElementCollection(targetClass=Pelicula.class)
private List<Pelicula> peliculas;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "id")
private Socio socio;

public Alquiler() {
super();
}
public Alquiler(int dias, float costopordia, String formapago, Date fechaAlquiler, List<Pelicula> pelicula, Socio socio) {
super();
this.dias = dias;
this.costopordia = costopordia;
this.formapago = formapago;
this.fechaAlquiler = fechaAlquiler;
this.peliculas = pelicula;
this.socio = socio;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Date getFechaAlquiler() {
return fechaAlquiler;
}
public void setFechaAlquiler(Date fechaAlquiler) {
this.fechaAlquiler = fechaAlquiler;
}
@OneToMany(targetEntity=Pelicula.class, cascade = CascadeType.ALL,orphanRemoval = true)
public List<Pelicula> getPeliculas() {
return peliculas;
}
public void setPeliculas(List<Pelicula> pelicula) {
this.peliculas = pelicula;
}
public Socio getSocio() {
return socio;
}
public void setSocio(Socio socio) {
this.socio = socio;
}
boolean CrearAlquiler() {
return true;
}
public int getDias() {
return dias;
}
public void setDias(int dias) {
this.dias = dias;
}
public float getCostopordia() {
return costopordia;
}
public void setCostopordia(float costopordia) {
this.costopordia = costopordia;
}
public String getFormapago() {
return formapago;
}
public void setFormapago(String formapago) {
this.formapago = formapago;
}

}

Alquiler配置类

package com.Project.Movies.model;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.springframework.boot.CommandLineRunner;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AlquilerConfig {
@Bean
CommandLineRunner commandLineRunnerA(IAlquilerRepository ialquilerRepository)
{

return args ->{

List<Pelicula> myList = new ArrayList<Pelicula>();

Pelicula shawshank = new Pelicula("The Shawshank Redemption",1994,"2hr 22mins","Two imprisoned men bond over a number of years, finding solace and eventual redemption through...","Frank Darabont","B","Drama",3);
Pelicula inception = new Pelicula("Inception",2010,"2hrs 28mins","Dom Cobb es un ladrón con una extraña habilidad para entrar a los sueños de la gente y robarles los secretos de sus subconscientes","Christopher Nolan","C","Science Fiction",4);
Pelicula fightclub = new Pelicula("Fight Club",1999,"2hrs 19mins","Un empleado de oficina insomne, harto de su vida, se cruza con un vendedor peculiar...","David Fincher","C","Suspenso/Drama",2);                 

myList.add(inception);

myList.add(shawshank);
myList.add(inception);
myList.add(fightclub);

Socio mariana= new Socio("Mariana Navidad","Arcos #34, Los Arcos","4446784563");
Socio sebastian= new Socio("Sebastian Mendoza","Rios #38, Mares","4336784563");
Socio roberto= new Socio("Roberto Obregon","Estrella #89, Universo","4556784563");

Alquiler shawshankAlquiler = new Alquiler(3,30,"efectivo",new Date(),myList,mariana);
Alquiler inceptionAlquiler = new Alquiler(5,25,"tarjeta",new Date(),myList,sebastian);
Alquiler inceptionAlquiler2 = new Alquiler(5,25,"efectivo",new Date(),myList,roberto);

ialquilerRepository.saveAll(List.of(shawshankAlquiler,inceptionAlquiler,inceptionAlquiler2));
};  
}

}

错误消息

java.lang.IollegalStateException:无法执行CommandLineRunner网址:org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:794(~[spring-boot-2.5.6.jar:2.5.6]网址:org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:775(~[spring-boot-2.5.6.jar:2.5.6]网址:org.springframework.boot.SpringApplication.run(SpringApplication.java:345(~[spring-boot-2.5.6.jar:2.5.6]网址:org.springframework.boot.SpringApplication.run(SpringApplication.java:1343(~[spring-boot-2.5.6.jar:2.5.6]网址:org.springframework.boot.SpringApplication.run(SpringApplication.java:1332(~[spring-boot-2.5.6.jar:2.5.6]网址:com.monoproject.UnivaMovies.UnivaMoviesApplication.main(UnivaMoviesApplication.java:11(~[classes/:na]由:org.springframework.dao.InvalidDataAccessApiUsageException引起:org.hubinate.TransientObjectException:对象引用未保存的瞬态实例-刷新前保存瞬态实例:com.monoproject.UnivaMovies.model.Pelicula;嵌套异常为java.lang.IllegalStateException:org.hibernate.TransientObjectException:对象引用未保存的瞬态实例-在刷新前保存瞬态实例:com.monoproject.UnivaMovies.model.Pelicula在org.springframework.om.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryGUtils.java:371(~[spring-orm-5.12.jar:5.3.12]网址:org.springframework.om.jpa.vendor。Hibernate JpaDialection.translateExceptionIfPossible(Hibernate jpa Dialection.java:235(~[spring-orm-5.12.jar。5.3.12]在org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:566(~[spring-orm-5.12.jar:5.3.12]网址:org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:743(~[spring-tx-5.3.12.jar:5.3.12]网址:org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:711(~[spring-tx-5.3.12.jar:5.3.12]位于org.springframework.transaction.entercept.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:654(~[spring-tx-5.3.12.jar:5.3.12]网址:org.springframework.transaction.intercept.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:407(~[spring-tx-5.3.12.jar:5.3.12]网址:org.springframework.transaction.interceptor.TransactionInterceptor.ioke(TransactionInterceptor.java:119(~[spring-tx-5.3.12.jar:5.3.12]网址:org.springframework.aop.framework.ReflectiveMethodInvocation.prough(ReflectiveMethodInvocation.java:186(~[spring-aop-5.3.12.jar:5.3.12]位于org.springframework.do.support.PersistenceExceptionTranslationInterceptor.ioke(PersistenceExceptionTranslationInterceptor.java:137(~[spring-tx-5.3.12.jar:5.3.12]网址:org.springframework.aop.framework.ReflectiveMethodInvocation.prough(ReflectiveMethodInvocation.java:186(~[spring-aop-5.3.12.jar:5.3.12]位于org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.ininvoke(CrudMethodMetadataPostProcessor.java:174(~[spring-data-jpa-2.5.16.jar:2.5.6]网址:org.springframework.aop.framework.ReflectiveMethodInvocation.prough(ReflectiveMethodInvocation.java:186(~[spring-aop-5.3.12.jar:5.3.12]位于org.springframework.aop.interceptor.ExposeInvocationInterceptor.ioke(ExposeInvocationInterceptor.java:97(~[spring-aop-5.3.12.jar:5.3.12]网址:org.springframework.aop.framework.ReflectiveMethodInvocation.prough(ReflectiveMethodInvocation.java:186(~[spring-aop-5.3.12.jar:5.3.12]网址:org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynaticalAopProxy:java:215(~[spring-aop-5.3.12.jar:5.3.12]网址:com.sun.proxy.$Proxy87.saveAll(未知来源(~[na:na]网址:com.monoproject.UnivaMovies.model.AlquilerConfigLambda$0(AlquilerConfig.java:39(~[classes/:na]网址:org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:791(~[spring-boot-2.5.6.jar:2.5.6]…5个普通帧省略

您说过添加了CascadeType。但您没有将其添加到Pelicula关系中。当您尝试保存Alquiler时,Hibernate会发现Pelicula没有保存,并且由于它没有CascadeType,它会给出该异常。

这样映射

@OneToMany(cascade = CascadeType.PERSIST)
private List<Pelicula> peliculas;

最新更新