使用属性中对象的原型保存实体

时间:2016-09-01 20:21:03

标签: java jpa orm persistence entities

我正在使用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);
    }

   ...
}

1 个答案:

答案 0 :(得分:0)

它可能有效,但它容易出错,因为原型实例不受管理。

您应该使用em.getReference(Employee.class, managerId)来创建引用的实体。它返回实体的未初始化代理,无需转到数据库。