Я делаю это следующим образом. Это заставляет меня чувствовать себя больным!Как обновить объект в jpa?
public class CounselInfoServiceImpl
extends BaseServiceImpl<CounselInfoDao, CounselInfoEntity, Long>
implements CounselInfoService {
@Inject
ClassService classService;
@Inject
@Override
public void setDao(CounselInfoDao dao)
{
super.setDao(dao);
}
@Override
public CounselInfoEntity editTo(CounselInfoEntity model)
{
CounselInfoEntity entity = id(model.getId());
if (!Strings.isNullOrEmpty(model.getName()))
{
entity.setName(model.getName());
}
if (!Strings.isNullOrEmpty(model.getAddress()))
{
entity.setAddress(model.getAddress());
}
if (!Strings.isNullOrEmpty(model.getEducation()))
{
entity.setEducation(model.getEducation());
}
if (!Strings.isNullOrEmpty(model.getPhone()))
{
entity.setPhone(model.getPhone());
}
if (!Strings.isNullOrEmpty(model.getQQ()))
{
entity.setQQ(model.getQQ());
}
if (!Strings.isNullOrEmpty(model.getRemark()))
{
entity.setPhone(model.getPhone());
}
if (!Strings.isNullOrEmpty(model.getSchool()))
{
entity.setSchool(model.getSchool());
}
if (model.getAge() != null)
{
entity.setAge(model.getAge());
}
if (model.getSex() != null)
{
entity.setSex(model.getSex());
}
if (model.getClassIntention() != null)
{
entity.setClassIntention(
classService.id(
model.getClassIntention().getId()));
}
return entity;
}
}
Любые предложения, чтобы избежать этого spaghetti code
?
BTW, написание этого кода - тяжелая работа!
EDIT
Кстати, я не думаю, что em.merge
готов к этому. См here
The EntityManager.merge() operation is used to merge the changes made to a detached object into the persistence context.
Она отметила detached object
, но модель обновления только что получила часть дня. Так что, если я сливаю модель, все значений модели будет применяться к лицу. (Например, пароль, который я не хочу, чтобы обновить и editTo
не должен касаться пароля.)
У вас есть странный способ сделать. Обычно при использовании приложения для редактирования объекта пользователь использует предварительно заполненную форму, содержащую все поля объекта, изменяет поля, которые необходимо изменить, представляет эту форму, и все поля, пустые или нет, записываются к объекту. Я никогда не видел форму, в которой оставить поле пустым означает «не изменять значение этого атрибута». –
Нет пустого поля в форме, потому что я не буду отображать это поле. Некоторая подача проверена. Также пользователь может редактировать только часть всей даты. – wener
Я не понимаю, что это значит. О какой дате вы говорите? Как выглядит форма? Что означает «проверить чувствительность»? –