【发布时间】:2014-04-07 05:17:16
【问题描述】:
我对传递给持久性的分离实体有疑问。我以为我知道分离实体是什么,但显然这对我来说太多了......所以无论如何我正在尝试创建一个 Person 对象,该对象具有一个带有 Office 对象的 Interviewer 对象,并且每次我尝试坚持 Person 我得到例外(在这种情况下,Office 是分离的实体)。相关代码如下:
@Before
public void setup() {
Person person = PersontHelper.createPerson();
person.getInterviewer().setOffice(officeDao.find(1));
personDao.create(person);
interviewers = service.getAllInterviewers();
}
createPerson() 是辅助类的静态方法:
public static Person createPerson(){
Interviewer interviewer = Interviewer.createInterviewer();
Collection<Subject> skills = new HashSet<SubjectO>();
Person person = new Person();
person.setInterviewer(interviewer);
person.setSkills(skills);
return person;
}
最后是createInterviewer():
public static Interviewer createInterviewer(){
Office office = new Office(1, 1, "Bristol");
Interviewer interviewer = new Interviewer();
interviewer.setFirstname("John");
interviewer.setSurname("Bloggs");
interviewer.setEmail("john.example.com");
interviewer.setJobTitle(30);
interviewer.setOffice(office);
interviewer.setInterviews(new HashSet<Interview>());
return interviewer;
}
您可能会注意到创建 Interviewer 的辅助方法已经设置了它的 office,但这用于其他测试,并且由于具有相同属性的 office 存储在测试数据库中,我使用 officeDao 获取它并将其设置为面试官办公室。我尝试了多种组合我在这里发布的内容,但到目前为止我没有得到积极的结果。我不明白为什么它抱怨 Office 被分离,因为即使我没有从 db 获取它,它也会这样做——换句话说,所有三个对象都是新的,并且它们与持久性上下文无关。我已经阅读了http://java.boot.by/scbcd5-guide/ch06.html,但仍然无法解决。我在这里做错了什么?
【问题讨论】: