Hibernate JPA one-to-one de sauver des enfants de la classe de l'entité

J'ai un one-to-one relation à l'aide de PrimaryKeyJoinColumn annoté sur le parent côté. Et maintenant, je veux sauver l'enfant de l'entité en elle-même.

Par exemple, j'ai Employee et EmpInfo que l'entité enfant, j'ai besoin d'enregistrer EmpInfo (bien sûr après la définition de la propriété id du parent). Toutefois, lorsqu'un tel dispositif est utilisé, j'obtiens une exception énumérés ci-dessous...

org.springframework.dao.InvalidDataAccessApiUsageException: detached entity passed to persist

Des idées pourquoi hibernate ne pas l'autoriser? Pour être plus clair, le code que j'ai est ci-dessous...

ParentEntity:

public class Employee {
    private Long id;
    private String name;
    private EmployeeInfo info;
    private Integer enumId;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    public Long getId() {
        return id;
    }

    @Column(name="EMP_NAME")
    public String getName() {
        return name;
    }

    @PrimaryKeyJoinColumn
    @OneToOne(cascade = CascadeType.REMOVE)
    public EmployeeInfo getInfo() {
        return info;
    }
  }

ChildEntity:

@Table(name="EMP_INFO")
@Entity
public class EmployeeInfo {
    private Long id;
    private String email;

    @Column(name="EMPLOYEE_EMAIL")
    public String getEmail() {
        return email;
    }

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name = "emp_id", nullable = false)
    public Long getId() {
        return id;
    }
}

La façon dont j'essaie de le sauver...

Employee emp = new Employee();
emp.setEnumId(SimpleEnum.COMPLETE);
emp.setName("Shreyas");
EmployeeInfo info = new EmployeeInfo();
info.setEmail("Sh@gmail");
concreteDAO.save(emp);   //This uses the JPATemplate provided by Spring JpaDaoSupport


info.setId(emp.getId());
concreteDAO.saveEmpInfo(info);

Tous les pointeurs serait bien apprécié, comme comment puis-je essayer de sauver l'enfant entité?

OriginalL'auteur PaiS | 2010-08-16