2016-05-20 10 views
0

Ich habe folgendes Objektmodell und Repository in meiner Anwendung:Java JPA-Repository und Polymorphismus

@Entity 
class Vehicle {} 

class Car extends Vehicle {} 
class Truck extends Vehicle {} 

@Repository 
public interface VehicleRepository extends JpaRepository<Vehicle, Long> {} 

Was ich versuche zum Laufen zu bringen folgt:

Vehicle t = new Truck(); 
VehicleRepository r = new VehicleRepository(); 
r.save(t); 

Wie diesen Code zum Laufen bringen ohne Notwendigkeit, Truck to Vehicle Objekt zu kopieren?

Danke!

+0

Durch das Erstellen eines TruckRepository? –

+0

Ich muss Tuck oder Car spezifische Daten nicht beibehalten. – toppless

+0

Fahrzeug t = neuer Lkw(); –

Antwort

0

Als Alan Hay Sie verbunden sind, müssen Sie das Erbe einzurichten:

  1. @Entity In allen Klassen
  2. @Inheritance zu Ihrem Fahrzeugklasse hinzufügen Erbe für die EntityManager zu aktivieren, wenn Sie sind nicht alle roh Fahrzeug speichern soll, können Sie @ MappedSuperclass

Für den Rest verwenden relink i auf den Link, Alan Hay bereitgestellt: https://en.wikibooks.org/wiki/Java_Persistence/Inheritance

+0

Danke, aber das möchte ich nicht erreichen. Ich möchte Truck and Car nicht persistieren und diese dem Entity Manager zur Verfügung stellen, sondern nur Fahrzeugdaten. – toppless

+0

Verwenden Sie dann einen Kopierkonstruktor, um alles zu transformieren, das von Fahrzeug zu Fahrzeug erbt. Aber wenn Sie das Fahrzeug in der Datenbank abfragen, erhalten Sie Fahrzeug, nicht LKW weder Auto, also mache ich nicht wirklich den Punkt, dies zu tun .... Oder Sie können @Transient zu irgendeinem Feld von Ihren Unterklassen hinzufügen, die Sie nicht 'tun' Ich möchte gespeichert werden. – Walfrat

+0

Danke, das funktioniert gut. Aber die Frage dieser Post ist, einen Weg zu finden, ohne die Daten in das Fahrzeugobjekt kopieren zu müssen. – toppless

Verwandte Themen