Java 为什么hibernate从关联表中删除数据?
我在我的计划中有以下关系:Java 为什么hibernate从关联表中删除数据?,java,hibernate,annotations,mapping,Java,Hibernate,Annotations,Mapping,我在我的计划中有以下关系: @Entity @Table(name = "student") public class Student extends Person { private Map<Document, DocumentInfo> documents = new HashMap<Document, DocumentInfo>(); ... @OneToMany @JoinTable(name = "student_d
@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;
}
...
}
我做错了什么?
谢谢
我的测试代码如下所示:
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);
}
好像我刚刚发现了问题。现在无法在我的旧项目中检查它,但这与与有关的问题非常相似。是否有可能第一次提交休眠空文档?可以想象您正在清除映射或将null/空映射分配给实体管理的某个位置。当您对实体进行更改时,这些更改将转到数据库。这和JDBC不同,在JDBC中,除非显式提交更新/删除,否则不会更改内容。不,我在写入数据库之前初始化映射。我在那里写条目,然后我可以从数据库gui管理器中看到记录。然后,当我只调用getDocuments而不清除映射时,或者当我在日志中看到hibernate清除我的关联时table@Affe对不起,我在第一条消息中添加了我的代码read做什么?您如何管理会话生命周期和事务边界?
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);
}