Ich habe ein Eltern-Portlet, das den Liferay Service Builder für die Persistenz verwendet. Die untergeordneten Portlets verwenden dieselben Entitäten für die Persistenz. Also habe ich das Eltern-Portlet als Abhängigkeit in untergeordneten Portlet mit Liferay-Plugin-Eigenschaften hinzugefügt. Alles ist in Ordnung, wenn ich einen einzigen Primärschlüssel für Entitäten habe. Aber im Falle einer zusammengesetzten Primärschlüssel-Entität tritt eine Klassenausnahme auf, wenn ich eine Entität finde, die diese Entität verwendet. Ich konnte den Grund nicht finden. ist es wegen Klassenladerproblemen?Class-Cast-Ausnahme bei Verwendung des Composite-Schlüssels in Service Builder
Antwort
Das Service-JAR existiert sowohl im Eltern-Portlet als auch im Kind-Portlet, was wir in diesem Szenario nicht vermeiden können. Während das Debugging ausgeführt wird, obwohl das PK-Klassenobjekt in einem untergeordneten Portlet erstellt wird, erfolgt die Persistenz im übergeordneten Portlet mithilfe des übergeordneten Portlet-Klassenladeprogramms. Das macht das Problem.
Die Lösung besteht darin, eine Methode in localserviceImpl für die Persistenz oder das Abrufen ohne Verwendung von Composite-PK zu erstellen. Erstellen Sie mit einzelnen PK-Attributen. Erstellen Sie PK in localServiceImpl mit den Attributen und gehen Sie für fetch oder persistence.
Höchstwahrscheinlich könnten Sie diese Klassen zweimal auf Ihrem classpath
haben. Wenn Sie die Abhängigkeit über liferay-plugin-package.properties
definieren, befindet sich die jars
in WEB-INF/lib
. Vielleicht haben Sie auch die gleiche jars
versehentlich auf der globalen classpath
tomcat/lib/ext
.
- 1. Verwendung des Executor-Service
- 2. NullPointerException bei Verwendung des Datenbankobjekts
- 3. Service Builder: BUILD FAILED
- 4. Symfony2 ScopeCrossingInjectionException bei Verwendung des Prototypbereichs
- 5. NoClassDefFoundError bei Verwendung des Systembereichs
- 6. Verwendung des Spaltennamens bei Verwendung von SqlDataReader.IsDBNull
- 7. Verwendung des $ q-Service mit eckigen
- 8. Typumwandlung bei Verwendung des Protokolls in Swift
- 9. Bilder im Interface Builder bei Verwendung von MonoTouch
- 10. Fehler bei der Verwendung der C++ Builder-Bridge-Datei
- 11. Object Builder Ausnahme bei der Verwendung von Enterprise Liarbary
- 12. SQL Server: Ermitteln des Domänenbenutzers bei Verwendung des Dienstkontos
- 13. Build-Problem bei Verwendung der Paketwiederherstellung in Team Foundation Service
- 14. Bereich der Ansichtsmodelle bei Verwendung des Service Locator-Musters in WPF-App
- 15. Relativer URL-Schrägstrich bei Verwendung des Basistags
- 16. Ungültige Verbindungszeichenfolge bei Verwendung des Tabellenadapters
- 17. Verschlüsselte Datengröße bei Verwendung von Triple DES
- 18. Statusverwaltung bei Verwendung des Redux-Formular-Assistentenformulars
- 19. Länge des Meteorpfads bei Verwendung von elektrify
- 20. Verschiedene Ergebnisse bei Verwendung des ThreadStatic-Attributs
- 21. Thows Null-Referenzausnahme bei Verwendung des Prädikats
- 22. erhalten Kunden count service builder Finder
- 23. Verwendung setInterval in Service Arbeiter
- 24. Verwendung linker Verknüpfung mit Query Builder-Doktrin
- 25. JavaFX Scene Builder - Verwendung von Variablenwerten
- 26. Überprüfen des ungültigen Status bei Verwendung des Null-Objektmusters
- 27. ArgumentError: Nachrichtenvertreter außerhalb des Bereichs bei Verwendung des RSA Gems
- 28. gatt.writeDescriptor Fehlerstatus Rückruf bei Verwendung des verbundenen Geräts
- 29. Ändern des Fenstertitels in Interface Builder
- 30. Fragen zur Verwendung des Background Intelligent Transfer Service
Ich habe das Glas im globalen Klassenpfad nicht. Das Dienst-JAR existiert sowohl im Eltern-Portlet als auch im Kind-Portlet, was wir in diesem Szenario nicht vermeiden können. Während das Debugging ausgeführt wird, obwohl das PK-Klassenobjekt in einem untergeordneten Portlet erstellt wird, erfolgt die Persistenz im übergeordneten Portlet mithilfe des übergeordneten Portlet-Klassenladeprogramms. Das macht das Problem. – San