Was ich wahrscheinlich Wiederverwendung zu maximieren tun würde, wäre meine eigene ResultTransformer
zu schreiben, die Sie vor dem Ausführen Ihrer Abfrage und als Teil dieser Implementierung instanziiert könnte, sind Sie verpflichtet, geben Sie ihm die entsprechenden Zuordnungsinformationen an.
// construct the transformer and register mappings
MappedResultTransformertransformer = new MappedResultTransformer(DtoClass.class);
transformer.map("ID", "id");
transformer.map("DESCRIPTION", "description");
// apply the transformer
session.createQuery(...).setResultTransformer(transformer).list();
Hier ist ein Beispiel, wie der Transformator aussehen könnte.
public class MappedResultTransformer extends BasicTransformerAdapter {
final Map<String, String> fieldMappings = new HashMap<>();
final Class<?> clazz;
public MappedResultTransformer(Class<?> clazz) {
this.clazz = clazz;
}
public void map(String alias, String property) {
fieldMappings.put(alias, property);
}
@Override
public Object transformTuple(Object[] tuple, String[] aliases) {
Object result = clazz.newInstance();
for (int i = 0; i < aliases.length; ++i) {
Object tupleValue = tuple[ i ];
String alias = aliases[ i ];
String propertyName = fieldMappings.get(alias);
if (propertyName != null) {
// use reflection to set the value of 'propertyName' on 'result'
}
}
return result;
}
}
Die Schönheit hier ist, dass diese Klasse vollständig wiederverwendbar ist, ist es nicht auf eine bestimmte Klasse oder Abfrage gebunden. Sie könnten dann darauf erweitern und möglicherweise Unterstützung für verschachtelte Eigenschaften usw. hinzufügen.
das Problem ist, dass der Alias "ID" heißt "ID" in der Klasse – Khodabakhsh
yeah Sie können Annotation dort @id hinzufügen auf diese Weise wird es dto –
zuordnen, was ist mit Beschreibung? – Khodabakhsh