2017-02-08 3 views
1

У меня есть класс Employee, как показано ниже с OneToMany отношений с образованиемorg.hibernate.PersistentObjectException: отдельностоящий объект передается упорствовать: com.hibernate.dto.Employee

@Entity 
    public class Employee { 
     @Id 
     @GeneratedValue 
     private int empId; 
     private String empName; 
     @Temporal(TemporalType.DATE) 
     private Date empDob; 
     @Temporal(TemporalType.TIMESTAMP) 
     private Date empDoj; 
     private Long empPhone; 
     @OneToMany(cascade=CascadeType.PERSIST) 

     //setter and getters 
} 

@Entity 
public class Education { 
    @Id 
    @GeneratedValue 
    private Integer aadharNum; 
    private String collegeName; 
    private String schoolName; 
    private String companyName; 

    // setter and getter 

} 
     public class HibernateTest { 
       public static void main(String[] args) { 
       try { 
        Employee employee=new Employee(); 
        employee.setEmpName("Sri"); 
        employee.setEmpId(7664); 
        employee.setEmpDob(new java.util.Date()); 
        employee.setEmpDoj(new java.util.Date()); 
        employee.setEmpPhone(8102087655l); 
        Education education=new Education(); 
        education.setSchoolName("Neo Royal School"); 
        education.setCollegeName("IIT Gu"); 
        education.setCompanyName("Insys"); 
        Education education2=new Education(); 
        education2.setSchoolName("Royal School"); 
        education2.setCollegeName("IIT Hyd"); 
        education2.setCompanyName("IM"); 
        employee.getEducation().add(education); 
        employee.getEducation().add(education2); 

    SessionFactory sessionFactory=new Configuration().configure().buildSessionFactory(); 
        Session session=sessionFactory.openSession(); 
        session.beginTransaction(); 
        session.persist(employee); 
        session.getTransaction().commit(); 
        session.close(); 
     } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     } 

ответ

0

Это потому, что вручную присваивается идентификатор к вашему который еще не управляется Hibernate. Он должен работать, когда вы удаляете это employee.setEmpId(7664); Hibernate затем автоматически сгенерирует идентификатор для вас (из-за @GeneratedValue).

0

Проблема в том, что для вашей empId вы используете аннотацию @GeneratedValue. Это означает, что, когда вы сохраняющиеся новый объект, поле идентификатор должен быть пустым, и вы должны позволить поставщику JPA сделать заполнить, что в.

Так либо удалить @GeneratedValue

@Id 
private int empId; 

или сделать не установлен empId явно

+0

Спасибо за исправление, это сработало. – Srinu

+0

@john hanks для коррекции он работал. – Srinu

+0

, пожалуйста, примите его ответ тогда –

Смежные вопросы