2017-03-28 8 views
0

私は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の間に違いはありません。

+0

Reportインスタンスを保存しようとしたのと同じセッションでPersonインスタンスが取得されましたか? –

+0

@Transactionalでメソッドをラップしましたが、まだ起きています – Dan

+0

例外の完全なスタックトレースとメソッドreportRepo.save()のコードを含めるように質問を編集できますか? –

答えて

0

誰かが同じ問題に遭遇した場合、私は自分の問題点を投稿したかったのです。それはあなたを助けるかもしれません。

私の問題はnullフィールド値でした。これは私の元の質問では省略されました。なぜなら、それは監査目的であり、Objects機能では役割を果たさないからです。しかし、Hibernateがnullという値を見た場合、Objectを新しいインスタンスとして扱い、それを永続化しようとします(または少なくとも私の場合)

関連する問題

 関連する問題