Estoy usando Spring con Hibernate como proveedor JPA y estoy tratando de obtener un @OneToMany (un contacto que tiene muchos números de teléfono) para guardar la clave externa en la tabla de números telefónicos. Desde mi formulario, recibo un objeto de contacto que tiene una lista de teléfono (números). El contacto se conserva correctamente (Hibernate recupera un PK de la secuencia especificada). La lista de Teléfono (números) también persiste con un PK correcto, pero no hay FK en la tabla de Contactos.JPA no guarda clave externa en @OneToMany relación
public class Contact implements Serializable {
@OneToMany(mappedBy = "contactId", cascade = CascadeType.ALL, fetch=FetchType.EAGER)
private List<Phone> phoneList;
}
public class Phone implements Serializable {
@JoinColumn(name = "contact_id", referencedColumnName = "contact_id")
@ManyToOne
private Contact contactId;
}
@Repository("contactDao")
@Transactional(readOnly = true)
public class ContactDaoImpl implements ContactDao {
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
public void save(Contact c) {
em.persist(c);
em.flush();
}
}
@Controller
public class ContactController {
@RequestMapping(value = "/contact/new", method = RequestMethod.POST)
public ModelAndView newContact(Contact c) {
ModelAndView mv = new ModelAndView("contactForm");
contactDao.save(c);
mv.addObject("contact", c);
return mv;
}
}
Afortunadamente obtuve todos los bits relevantes anteriores, de lo contrario, hágamelo saber.
Gracias, el establecimiento de las relaciones java resuelto. –
¿Es correcto el método 'addPhone'? Me parece que el cheque nulo está en el lugar equivocado. –
phone.setContact (esto) - ¿Podría ser una pérdida de memoria? ¿o no? –