1

私は私のプログラムで次の関係を持っています:

@Entity
@Table(name = "student")
public class Student extends Person {
    private Map<Document, DocumentInfo> documents =
       new HashMap<Document, DocumentInfo>();
    ...
    @OneToMany
    @JoinTable(name = "student_documents",
            joinColumns = @JoinColumn(name = "student"),
            inverseJoinColumns = @JoinColumn(name = "document_info"))
    @MapKeyJoinColumn(name = "document")
    public Map<Document, DocumentInfo> getDocuments() {
        return documents;
    }
    ...
}

生徒のドキュメント情報を保存すると、すべて問題ないように見えます.データベースから彼を読み取ると、すべて問題ないように見えますが、もう一度読み込もうとすると、NullPointerException が発生します。私はいくつかの調査を行い、student.getDocuments()休止状態の最初の呼び出し中に table からレコードを削除することを発見しましたstudent_documents:

Hibernate: select document0_.id as id2_0_, document0_.title as title2_0_ from document document0_ where document0_.id=?
Hibernate: select document0_.id as id2_0_, document0_.title as title2_0_ from document document0_ where document0_.id=?
Hibernate: delete from student_documents where student=?

私が間違ったことをしましたか?ありがとう

私のテストコードは次のようになります:

    Student student = new Student();
    student.setFirstName("123");
    studentService.add(student);
    Student student2 = studentService.read(student.getId());
    assertFalse(student2.getDocuments().size() == 0); // here it all occurs

サービス方法:

public Student add(Student student) {
    for (Document document : documentRepository.findAll()) {
        DocumentInfo documentInfo = new DocumentInfo(false, "");
        documentInfoRepository.save(documentInfo);
        student.getDocuments().put(document, documentInfo);
    }
    return studentRepository.save(student);
}
4

1 に答える 1

0

問題を見つけたようです。私の古いプロジェクトでは今は確認できませんが、この hibernate bugに関連する問題と非常によく似ています。

于 2014-02-18T13:17:08.993 に答える