我有一个Report
对象,它有一个'reporter'属性。这个“记者”是对Person
已存在的ssn的引用。当我尝试在记者属性上保存Report
对象时,我得到“对象引用未保存的瞬态实例”,但此人已经在Persons表中。
@Entity
@Table(name="REPORTS")
public class Report {
@Id
private long id;
@OneToOne
@JoinColumn(name="reporter",
referenceColumnName="ssn") // <-- Joining to a non-primary key property
private Person reporter;
// mutators
}
@Entity
@Table(name="PERSONS")
public class Person {
@Id
private long id;
@Column(name="ssn")
private long ssn;
// other properties
// mutators
}
这是我看到抛出异常的地方:
public ReportTask implements Runnable {
@Autowire
private String reportName;
@Autowire
private ReportRepository reportRepo;
@Autowire
private PersonRepository personRepo;
public void run(){
Person p = personRepo.getByName(reportName); // gets Person Entity by Name
Report r = new Report();
r.setName("Report for "+reportName);
r.setReporter(p);
reportRepo.save(r); // <-- Exception is thrown here
}
}
异常声明Person
对象是暂时的,需要在保存Report
对象之前保存。
另外,为了使事情更有趣,似乎前89条记录插入完美;它只在90号失败。我检查了所有值,记录89和90之间没有区别......
答案 0 :(得分:0)
如果有人遇到同样的问题,我想发布我的问题。它也可以帮到你。
我的问题是null
字段值。它在我的原始问题中被省略了,因为它是出于审计目的而在“对象”功能中没有发挥作用,但是看起来如果Hibernate看到null
值,它会将对象视为新的实例并试图坚持它(或者至少在我的情况下)