В моем веб-приложении JSF я использую EclipseLink
Дескриптор настройки
и
История политики
для заполнения таблицы истории в базе данных.Соответствующий класс сущностей JPA помечен @Customizer(beans.HistoryLesionhCustomizer.class)
Таблица истории имеет те же поля, что и исходная таблица, плюс два поля (start_date & end_date) для указания начала и конца операции в строке.Это полностью работает.Но мне нужно заполнить другое поле в таблице истории.Это поле, которое я назвал user , должно быть заполнено User Principals , и это позволит мне отследить пользователя, который выполнил операцию CUD (Создать / Обновить / Удалить).Я думал, что History Policy позволит мне добавить поле, просто указав его соответствующее имя в базе данных и указав значение объекта, которое должно быть вставлено.Но это не так, или, может быть, я не могу понять, как это можно сделать.Другими словами, наряду с start_date и end_date, я хочу заполнить поле пользователя:
FacesContext.getCurrentInstance (). GetExternalContext (). GetRemoteUser ();
package beans;
/**
* Whenever there is a change on a record or an insert, change will be traced.
* @author mediterran
*
*/
import javax.faces.context.FacesContext;
import org.eclipse.persistence.config.DescriptorCustomizer;
import org.eclipse.persistence.descriptors.ClassDescriptor;
import org.eclipse.persistence.history.HistoryPolicy;
public class HistoryLesionhCustomizer implements DescriptorCustomizer {
@Override
/**
* Implementation method to use
*/
public void customize(ClassDescriptor cd) throws Exception {
String user = FacesContext.getCurrentInstance().getExternalContext().getRemoteUser();
HistoryPolicy policy = new HistoryPolicy(); // Instantiates a new policy
//policy.postUpdate();
policy.useDatabaseTime(); // Use the default database time to avoid date conflict
policy.addHistoryTableName("history_lesionh"); // Indicate the source table name
policy.addStartFieldName("start_date"); // indicate the start date DB column
policy.addEndFieldName("end_date"); // Indicate the end date DB column
cd.setHistoryPolicy(policy); // Use the Policy for the entity class where used @Customizer(HistoryLesionhCustomizer.class)
}
}
Любая помощь илиобходные пути будут оценены.Спасибо