2017-11-15 3 views
0

Mein Team verwaltet eine Webanwendung, die mit Spring Boot, Spring Data, Thymeleaf und JPA/Hibernate erstellt wurde. Wir schlagen vor kurzem ein Problem mit einem Ausdruck Thymeleaf Vorlage Springels andernfalls aufgrund eines Problems Typumwandlung bewerten:Soll der DomainClassConverter von SpringData mit Hibernate-Proxies arbeiten?

Verursacht durch: org.springframework.core.convert.ConverterNotFoundException: Nein Konverter gefunden Lage, vom Typ Umwandlung [com .xyz.app.model.Employee _ $$ _ jvst7ca_34] eingeben [java.lang.String]

der Ausdruck ist $ {{Mitarbeiter}}, wo ein Mitarbeiter ein Unternehmen in das Modell durch eine Feder-Controller platziert ist. Die Mitarbeiter Einheit ist mit einem einfachen Aufruf zu einem Repository Spring Data abgerufen:

@ModelAttribute("employee") 
public Employee getEmployee(@PathVariable("employeeId") long employeeId) { 
    return employeeRepository.findOne(employeeId); 
} 

Während des Debuggen, bemerkte ich, dass die Employee-Entität zurückgegeben wird, ist eigentlich ein Hibernate-Proxy, wie Sie in der Ausnahme Ursache aus dem Protokoll sehen - die Employee-Klasse hat den Javassist Suffix: _$$_jvst7ca_34

Spring Data Register DomainClassConverter mit Spring GenericConversionService, die wie $ eine Einheit auf eine ID für einen Ausdruck umwandeln sollten {{Mitarbeiter}}, wenn die @EnableSpringDataWebSupport Anmerkung vorhanden ist. Spring Boot bietet eine Autokonfigurationsklasse SpringDataWebAutoConfiguration, die dies standardmäßig aktiviert. Ich habe bestätigt, dass diese Autokonfigurationsklasse von unserer Anwendung angewendet wird.

Ich bestätigte auch durch das Debuggen, dass die GenericConversionService die DomainClassConverter.ToIdConverter abruft, wenn versucht wird, von Employee _ $$ _ jvst7ca_34 in String zu konvertieren. DomainClassConverter.ToIdConverter.matches(sourceType, targetType) gibt jedoch false zurück, so dass der Konverter nicht verwendet wird. Es gibt false zurück, weil es kein Repository in Repositories mit dem Typ Employee_$$_jvst7ca_34 finden kann. Ich sehe mit dem Debugger, dass das einzige Employee-Repository in der Liste der Repositories für Employee ist.

Ist das ein Fehler in ? Sollte es nicht in der Lage sein, ein Repository für einen Proxy abzurufen? Es scheint, dass Proxies recht häufig vorkommen sollten, da jede Entität mit einer faulen Sammlung (der empfohlene Sammlungstyp) als Proxy zurückkommt. Oder machen wir etwas falsch? Irgendwelche Hinweise würden sehr geschätzt werden!

Antwort

0

Es stellt sich heraus, dass dies ein Fehler in Spring Data Commons war. Die issue wurde nun angesprochen und in zukünftigen Releases sollte es möglich sein, einen Proxy zu konvertieren.

Verwandte Themen