對Spring MVC使用PropertyEditor時,讓它們從數據庫中獲取實體是不好的?我應該改爲創建一個空實體並設置其ID。在PropertyEditor中從數據庫中獲取實體
例如,對於實體員工:
@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 **/
}
它是一個壞主意的屬性編輯器來獲取實體下方有以下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());
}
}
可在控制器綁定:
@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 **/
}
是否優先使用更具體的方法用EmployeeEditor並有它只是實例化一個Employee實體,並設置其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());
}
}
這樣,我們不會在每一僱員表上存在的時間做一個往返到數據庫,但我不能確定這是否按照預期與Hibernate一起工作?
一如既往的好答案(+1),但你不斷髮明單詞(performat,reuesed)。你知道大多數瀏覽器都有拼寫檢查器嗎? :-) – 2011-04-08 14:25:16
@ Sean Patrick Floyd:我的瀏覽器拼寫檢查器適用於德語。但我想我應該把它改成英文。 – Ralph 2011-04-08 14:29:18
我建議,因爲你的德語拼寫比你的英語拼寫好很多。或者使用專門的瀏覽器只是爲了:-) – 2011-04-08 14:40:02