我对hibernate很新,而@ManyToOne不起作用。我有两个DAO课程:
CompanyDAO
@Entity
@Transactional
public class CompanyDAO implements Serializable {
@OneToMany(cascade = { DETACH, MERGE, PERSIST,REFRESH },
fetch = FetchType.EAGER,
mappedBy = " companyEmployeeReference ")
protected Collection< EmployeeDAO> employeeData = new ArrayList<EmployeeDAO>();
EmployeeDAO
@Entity
@Transactional
public class EmployeeDAO implements Serializable {
@ManyToOne(optional = false)
private CompanyDAO companyEmployeeReference;
然后我通过
创建一些EmployeeDAOpublic EmployeeDAO create(EmployeeDAO o) {
em.persist(o);
return o;
}
然后尝试通过以下方式从公司方面获取此DAO:
public CompanyDAO getCompany(int companyID) {
CompanyDAO company = em.find(CompanyDAO.class, companyID);
return company;
}
它不起作用。找到的公司的employeeData始终为空。
但是,当我在员工创建后停止服务器时。然后在getCompany
一切正常之前重新启动它。我已经搜索了几个小时的互联网(包括stackoverflow),但找不到答案。我发现的唯一想法是this,但这似乎是一个非常人工的答案,是不是有更好的方法?
答案 0 :(得分:0)
很少澄清。含糊地说Dao
是拯救你实体的东西。不是实体本身。类似适用于@Transactional
。这不应该在实体级别上,而是在Service或Dao层上。
根据您的问题 - 如果您在同一会议期间执行此操作&#34;然后在getCompany
和em.refresh(company);
行之间添加find
return
。
答案 1 :(得分:0)
我的问题的解决方案是:
em.refresh(company)
em.flush();