我正在使用JPA并拥有下一个实体
@Entity
public class Employee {
@Id
int id;
String name;
@ManyToOne
Employee manager;
@OneToMany(mappedBy="manager",fetch=FetchType.EAGER)
Set<Employee> subordinaries;
// constructors , getters, setters
}
我可以使用属性对象的原型进行保存吗?这是有效的,但我并不觉得这是一个很好的做法。这是DAO类:
public class CompanyOrm {
@PersistenceContext(unitName="springHibernate")
EntityManager em;
...
@Transactional
public void addEmployee(int id, String name, int managerId){
//Using prototype of object manager - not
//object retrived from database with
//em.find(Employee.class, managerId)
//where filled only id
Employee prototype = new Employee();
prototype.setId(managerId);
Employee e = new Employee(id, name, prototype);
em.persist(e);
}
...
}
答案 0 :(得分:0)
它可能有效,但它容易出错,因为原型实例不受管理。
您应该使用em.getReference(Employee.class, managerId)
来创建引用的实体。它返回实体的未初始化代理,无需转到数据库。