Al usar PropertyEditors con Spring MVC ¿es malo tener que obtener entidades de la base de datos? Debo, en cambio, crear una entidad vacía y establecer su Id.Obteniendo Entidades de DB en un PropertyEditor
Por ejemplo, para la entidad empleado:
@Entity
@Table(name = "employee")
public class Employee implements GenericEntity<Integer>{
@Id
@GeneratedValue
@Column(name = "employee_id")
public Integer getEmployeeId() {
return employeeId;
}
public void setEmployeeId(Integer employeeId) {
this.employeeId = employeeId;
}
/** More properties here **/
}
¿Es una mala idea para buscar a la Entidad en el PropertyEditor a continuación con la siguiente GenericEntityEditor:
public class GenericEntityEditor<ENTITY extends GenericEntity<Integer>> extends PropertyEditorSupport {
private GenericDao<ENTITY, Integer> genericDao;
public GenericEntityEditor(GenericDao<ENTITY, Integer> genericDao) {
this.genericDao = genericDao;
}
@Override
public void setAsText(String text) throws IllegalArgumentException {
setValue(genericDao.findById(Integer.valueOf(text)));
}
@SuppressWarnings("unchecked")
@Override
public String getAsText() {
ENTITY entity = (ENTITY) getValue();
if(entity == null) {
return null;
}
return String.valueOf(entity.getId());
}
}
que se pueden unir en el controlador :
@Controller
public class EmployeeController {
/** Some Service-layer resources **/
@Resource
private EmployeeDao employeeDao; // implements GenericDao<ENTITY, Integer> genericDao
@SuppressWarnings("unchecked")
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(Employee.class, new GenericEntityEditor(employeeDao));
}
/** Some request mapped methods **/
}
¿Es preferible utilizar un enfoque más específico? con un EmployeeEditor y tienen sólo una instancia de una entidad del empleado y establecer su id:
public class EmployeeEditor extends PropertyEditorSupport {
@Override
public void setAsText(String text) throws IllegalArgumentException {
Employee employee = new Employee();
employee.setId(Integer.valueOf(text));
}
@SuppressWarnings("unchecked")
@Override
public String getAsText() {
Employee employee = (Employee) getValue();
if(employee == null) {
return null;
}
return String.valueOf(employee.getId());
}
}
De esta manera no hacemos un ida y vuelta a la base de datos cada vez que existe un Empleado en un formulario, pero no estoy seguro si esto funciona como se esperaba con Hibernate?
buena respuesta como siempre (+1) pero sigues inventando palabras (performat, recapituladas). ¿Sabes que hay correctores ortográficos disponibles para la mayoría de los navegadores? :-) –
@Sean Patrick Floyd: el corrector ortográfico de mi navegador es para el idioma alemán. Pero supongo que debería cambiarlo al inglés. – Ralph
Sugeriría eso porque tu ortografía alemana es mucho mejor que tu ortografía inglesa. O use un navegador dedicado solo para SO :-) –