私はReport
オブジェクトに「レポーター」プロパティを持っています。この 'レポーター'は既に存在する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の間に違いはありません。
Reportインスタンスを保存しようとしたのと同じセッションでPersonインスタンスが取得されましたか? –
@Transactionalでメソッドをラップしましたが、まだ起きています – Dan
例外の完全なスタックトレースとメソッドreportRepo.save()のコードを含めるように質問を編集できますか? –