JpaCustomizer.java
/*
* The coLAB project
* Copyright (C) 2021-2023 AlbaSim, MEI, HEIG-VD, HES-SO
*
* Licensed under the MIT License
*/
package ch.colabproject.colab.api.model.tools;
import ch.colabproject.colab.api.Helper;
import org.eclipse.persistence.config.SessionCustomizer;
import org.eclipse.persistence.descriptors.ClassDescriptor;
import org.eclipse.persistence.mappings.DirectToFieldMapping;
import org.eclipse.persistence.sessions.Session;
/**
* Customize JPA session.
* <ul>
* <li>use lowercase with underscore database field names
* </ul>
*
* @author maxence
*/
public class JpaCustomizer implements SessionCustomizer {
@Override
public void customize(Session session) throws Exception {
session.getDescriptors().values().forEach(this::updateFieldNameMapping);
}
/**
* custom field names
*
* @param desc mappings to override
*/
private void updateFieldNameMapping(ClassDescriptor desc) {
desc.getMappings().stream()
.filter(mapping -> (mapping.isDirectToFieldMapping()))
.map(mapping -> (DirectToFieldMapping) mapping)
.forEachOrdered(directMapping -> {
// format: table_name.FIELD ->[ tableNane, fieldName];
String[] names = directMapping.getFieldName().split("\\.");
if (names.length == 2) {
String newName = Helper.camelCaseToUnderscore(directMapping.getAttributeName());
directMapping.getField().setName(newName);
}
}
);
}
}