Füllen Kind bean mit Transformatoren.aliasToBean in Hibernate
Habe ich das nächste paar Bohnen:
Address {
String name;
String number;
String zipcode;
String town;
}
MyEntity {
Address address;
String value1;
String value2;
}
Ich versuche, die nächsten Hibernate-Abfrage:
private final List<String> propertiesDistinct = Arrays.asList("address.name");
private final List<String> properties = Arrays.asList("address.number",
"address.zipcode", "address.town")
ProjectionList projectionList = Projections.projectionList();
if (propertiesDistinct != null) {
ProjectionList projectionListDistinct = Projections.projectionList();
for (String propertyDistinct : propertiesDistinct)
projectionListDistinct.add(Projections.property(propertyDistinct).as(propertyDistinct));
projectionList.add(Projections.distinct(projectionListAgrupar));
}
if (properties != null)
for (String property : properties)
projectionList.add(Projections.property(property).as(property));
criterio.setProjection(projectionList);
//MORE FILTERS ON MyEntity FIELDS
//... criterio.add(Restrinctions...);
//I want to recover the results on my bean MyEntity so I don't have to create a new one
criterio.setResultTransformer(Transformers.aliasToBean(MyEntity.class));
Problem:
Caused by: org.hibernate.PropertyNotFoundException: Could not find setter for address.name on class com.entities.MyEntity
Ich verstehen, dass Hibernate ist auf der Suche nach etwas wie:
public String getAddressName() {} //This should be in MyEntity
Statt:
public String getName() {} //In my Address bean
Ideen über, wie kann ich das beheben, ohne eine neue bean?
Dank!
Sie haben setAddress(Address Address) in MyEntity und alle anderen setter in ganzen Bohnen?
ja Mach ich 🙂
ja Mach ich 🙂
InformationsquelleAutor maqjav | 2013-09-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schrieb ich eine ResultTransformer, die können dein problem lösen. Es ist der name AliasToBeanNestedResultTransformer, check it out auf github.
Sie sind herzlich willkommen
Nur die Arbeit im Objekt....nicht in der Sammlung bitte
InformationsquelleAutor Sami Andoni
Code in Github funktioniert gut, aber es ist die Veränderung in
import
für neue Versionen von hibernate. Die so Folgen.org.hibernate.property.PropertyAccessor
ersetzt durchorg.hibernate.property.access.spi.PropertyAccess
und
org.hibernate.property.PropertyAccessorFactory
ersetzt durchorg.hibernate.property.access.internal.PropertyAccessStrategyBasicImpl
Also müssen Sie ändern Sie den code aus
zu
InformationsquelleAutor Vicky Thakor
AliasToBeanNestedResultTransformer nicht behandelt Geschachtelte Multi-Level-DTOs, also schrieb ich eine, mit der n-level-dtos.
Hoffe, das hilft.
}
InformationsquelleAutor Ronny Shibley
Meine Lösung ist sehr einfach. Es ist nicht so sauber wie eine richtige Ergebnis Transformator, aber es ist nützlich, wenn Sie nur brauchen, um eine schnelle Projektion für ein paar Eigenschaften.
Wenn Sie
Could not find setter for address.name on class com.entities.MyEntity
Es bedeutet nicht, Hibernate ist auf der Suche nach
public String getAddressName() {}
. Stattdessen sieht es für einen setter mit dem unmöglichen "setAddress.Namen" name.Statt
.add(Projections.property("address.name"),"address.name"))
geben Sie eine richtige setter-name als zweites argument die .add () - Methode wie folgt.add(Projections.property("address.name"),"addressName"))
Dann fügen Sie einfach einen setter auf Ihre "MyEntity" root-Objekt: "setAddressName".
Der Nachteil ist, dass es "verschmutzte" Ihr Objekt mit zusätzlichen Methoden.
Auch gepostet hier.
InformationsquelleAutor otonglet
Versuchen, einen alias zu erzeugen, wie
criterio.createAlias("address", "add");
und dann Bearbeiten Sie Ihre Eigenschaften wieArrays.asList("add.number","add.zipcode", "add.town")
.Hoffe, das hilft.
org.hibernate.QueryException: Criteria objects cannot be created directly on components. Create a criteria on owning entity and use a dotted property to access component property: address
Versuchen
createCriteria
stattcreateAlias
. Ich kann das nicht testen mich.Hey Ean. Ich habe genau den gleichen Fehler wie vorher.
Sind Sie mit dem hinzufügen Ihrer Projektionen auf die neuen Kriterien? Beachten Sie, dass
createCriteria
gibt eine InstanzCriteria
. Sie sollten Ihre Projektionen zu diesem neuen.Ean Dank für Eure Hilfe, ich sholved es mit Sami Andoni Transformator. Danke trotzdem für deine Zeit 🙂
InformationsquelleAutor Ean V