我正在尝试使用已创建的Curs外键保存对象Alumne,但是我正在获取org.hibernate.TransientObject.Exception。
一个curs可以有很多校友。
我只想保存Alumne和外键idCurs,Curs已经保存在数据库中,但是我在
中得到了TransientObjectException@ManyToOne
@JoinColumn(name = "id", referencedColumnName = "idCurs")
我没有添加任何层叠,因为Curs已经保存并且我不想替换其数据。
我想念什么吗?告诉我再次询问curs吗?
错误
...
Caused by: java.lang.IllegalStateException: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: es.caib.accfor.ejb.aplicacions.alumne.entity.Alumne.curs -> es.caib.accfor.ejb.aplicacions.curs.entity.Curs
...
Caused by: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: es.caib.accfor.ejb.aplicacions.alumne.entity.Alumne.curs -> es.caib.accfor.ejb.aplicacions.curs.entity.Curs
...
Alumne.java
@Entity
@Table(name="Alumne")
public class Alumne implements Serializable {
...
@Id
@Column(name = "ALU_ID")
@SequenceGenerator(name = "AF_ACC_ALUMNE_ID_GENERATOR", sequenceName = "AF_ACC_ALUMNE_SEQ", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "AF_ACC_ALUMNE_ID_GENERATOR")
private Long id;
@ManyToOne
@JoinColumn(name = "ALU_AVALUACIO")
private GruReg avaluacio;
@ManyToOne
@JoinColumn(name = "id", referencedColumnName = "idCurs")
private Curs curs;
...
Curs.java
@Entity
@Table(name = "CURS")
public class Curs implements Serializable {
...
@Id
@Column(name = "OFF_CODI")
@SequenceGenerator(name = "AF_ACC_CURSOS_ID_GENERATOR", sequenceName = "AF_ACC_CURSOS_SEQ", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "AF_ACC_CURSOS_ID_GENERATOR")
private Long id;
...
AlumneService.java
@Stateless
@LocalBinding(jndiBinding = Names.ALUMNE_SVC)
public class AlumneService extends BackService<Alumne> implements AlumneServiceInterface {
public Alumne save(Alumne alumne) throws AppException {
Alumne nou;
if (eManager.contains(alumne)) {
nou = eManager.merge(alumne);
} else {
eManager.persist(alumne);
nou = alumne;
}
return nou;
}
答案 0 :(得分:0)
没有您的代码很难准确诊断,但我可以肯定这是您的问题。
在一个休眠会话中,您从数据库中加载Curs对象。
在另一个会话中,创建Alumne对象并在其上设置Curs对象。由于Curs对象处于 current 会话中,因此它被认为是瞬时的。
您需要做的是确保Curs对象连接到您要在其中创建Alumne对象的同一会话。因此,在保存Alumne对象的同一会话中,加载Curs对象并将其设置在Alumne对象上
那应该可以解决您的问题。