2012-05-23 4 views
0

Его вид тот же вопрос: Populating an existing entity using NHibernate только в обычном спящем режиме, а не в NHibernate. Также этот вопрос не был полностью решен IMO.Заполнение существующего объекта с помощью спящего режима

Слишком сложно, возможно ли (в спящем режиме) заполнить или заполнить новое лицо ранее прикрепленным объектом? Что-то вроде:

daoService.getEntityManager().find(Student.class, 123L); 
Student student = new Student(123) // Creating a new student 

daoService.fill(student); 

Результат должен быть, что экземпляр студент будет иметь точное значение, найденному диспетчером объектов.

Я не могу использовать слияние, так как он возвращает новый экземпляр (вместо заполнения данного экземпляра), и я не могу использовать load(), если идентификатор принадлежит уже прикрепленному объекту. Я хочу, чтобы код был общим для каждого объекта, поэтому его нецелесообразно просто устанавливать значения вручную. Я бы предпочел не использовать переосмысление в этом контексте из-за всех потенциальных ловушек (ленивая инициализация, наследование, получение методов без соответствующих методов набора и наоборот и т. Д.)

Я работаю над старой системой, которая использует как JPA-сущности, так и не-сущности (с JDBC), и это может решить мне некоторые серьезные проблемы.

Заранее благодарим за помощь!

+0

Таким образом, ваш идентификатор объекта не автоматически генерируется? – Santosh

+0

Он автоматически генерируется. Если бы я был неясно - студент с id 123 уже существует в моей БД. Я просто хочу заполнить данный объект его значением. – Ran

ответ

0

синтаксис не укомплектовать точный, так как я пишу в верхней части моей головы

Student student = new Student(); 

metadata = factory.getClassMetaData(Student.class); 

metadata.getIdproperty(); 
// copy id 

for(Property prop in metadata.getPropertyClosureIterator) 
{ 
    prop.setValue(student, prop.getValue(managedStudent)); 
} 
Смежные вопросы