JPA und Entity-Klassen: Wert ungültig

S

SuperMann

Gast
Hallo, ich hab folgendes Problem:

Ich hab zwei Entity Klassen die heißen: Person, Journey
Die Klasse Journey roll einen driver (also eine Person enthalten)

Wenn ich jedoch eine Journey in meine Datenbank speichern will bekomm ich immer die Meldung dass der Wert von driver ungültig ist. Ich weiß wirklich nicht wieso???

Hier sind mal meine Entities:

Person:
Java:
@Entity
public class Person implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    @NotBlank
    @Column(nullable = false)
    private String firstname;
    @NotBlank
    @Column(nullable = false)
    private String lastname;
    @NotBlank
    @Column(nullable = false, unique = true)
    @Email
    private String email;
    @NotBlank
    @Size(min = 8)
    @Column(nullable = false)
    private String password;
    @OneToMany 
    private List<Journey> journeys = new ArrayList<Journey>();

//Getter & Setter...


Journey:
Java:
@Entity
public class Journey implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    @Column(nullable = false)
    @NotBlank
    private String departure;
    @Column(nullable = false)
    @NotBlank
    private String destination;
    @Column(nullable = false)
    @NotNull
    @Temporal(javax.persistence.TemporalType.DATE)
    @Future
    private Date departureDate;
    @Column(nullable = false)
    @NotNull
    @Temporal(javax.persistence.TemporalType.TIMESTAMP)
    private Date departureTime;
    @Column(nullable = false)
    @NotBlank
    private String estimatedDuration;
    @Column(nullable = false)
    @NotBlank
    @Size(min=4)
    @Pattern(regexp="\\d{4,5}")
    private String departureZip;
    @Column(nullable = false)
    @NotBlank
    @Size(min=4)
    @Pattern(regexp="\\d{4,5}")
    private String destinationZip;
    @ManyToOne 
    private Person driver;



hier ist mein JSF File wo ich meine Journey eintrage:
Code:
<h:panelGrid columns="2" cellpadding="10">    
                            <h:outputLabel value="#{bundle.CreateJourneyLabel_driver}" for="driver" />
                            <h:selectOneMenu id="driver" value="#{journeyController.selected.driver}" title="#{bundle.CreateJourneyTitle_driver}" >
                                <f:selectItems value="#{personController.itemsAvailableSelectOne}"/>
                            </h:selectOneMenu>
                            <h:outputLabel value="#{bundle.CreateJourneyLabel_estimatedDuration}" for="estimatedDuration" />
                            <h:inputText id="estimatedDuration" value="#{journeyController.selected.estimatedDuration}"  required="true" />
                            <h:outputLabel value="#{bundle.CreateJourneyLabel_departureDate}" for="departureDate" />
                            <h:inputText id="departureDate" value="#{journeyController.selected.departureDate}"  required="true" >
                                <f:convertDateTime  type="date" pattern="dd.MM.yyyy"  />
                            </h:inputText>
                            <h:outputLabel value="#{bundle.CreateJourneyLabel_departure}" for="departure" />
                            <h:inputText id="departure" value="#{journeyController.selected.departure}" required="true" />
                            <h:outputLabel value="#{bundle.CreateJourneyLabel_departureTime}" for="departureTime" />
                            <h:inputText id="departureTime" value="#{journeyController.selected.departureTime}"  required="true" >
                                <f:convertDateTime type="time" pattern="HH:mm" />
                            </h:inputText>
                            <h:outputLabel value="#{bundle.CreateJourneyLabel_departureZip}" for="departureZip" />
                            <h:inputText id="departureZip" value="#{journeyController.selected.departureZip}"  required="true" />
                            <h:outputLabel value="#destination" for="destination" />
                            <h:inputText id="destination" value="#{journeyController.selected.destination}"required="true"/>
                            <h:outputLabel value="destination ZIP" for="destinationZip" />
                            <h:inputText id="destinationZip" value="#{journeyController.selected.destinationZip}"  required="true"/>
                        </h:panelGrid>  
                         <h:commandLink action="#{journeyController.create}" value="#{bundle.CreateJourneySaveLink}" />

Ich bekomm immer den Fehler:
j_idt41:j_idt49:driver: Überprüfungsfehler: Wert ist ungültig.

Ich weiß nicht was falsch ist???

Ich würd mich sehr über jeden Kommentar und jede Hilfe freuen

lg.
 

Fant

Bekanntes Mitglied
Interessant wären die Controller-Klassen... Versuchst du vielleicht einen String in driver zu speichern? Hast du da einen passenden Konverter für geschrieben?
 

Nogothrim

Aktives Mitglied
Sieht mir auch so aus, ein Person Objekt in einem selectOneMenu ohne Converter auswählen sollte eigentlich nicht so wirklich funzen :)
Thread gehört auch glaub ich eher ins EE Forum?
 

TimSkyp

Mitglied
Vielen Dank :)

Ich bin noch neu in diesem Thema und hab auf den Converter vergessen, was ich jetzt aber nachgeholt habe.

Jetzt bekomm ich den Fehler mit dem "ungültigen Wert" jedoch nicht mehr aber leider wird der driver nicht mit zu meiner Journey gespeichert!

Könnte vielleicht noch etwas anders falsch sein? Oder ist die Verbindung nicht ausreichend definiert zwischen Journey und Person?

Hier ist mal der Code von meinem Converter, vielleicht liegst ja auch an dem??

Java:
@Named(value = "personConverter")
@FacesConverter(forClass = Person.class)
public class PersonConverter implements Converter {

    /**
     * Creates a new instance of PersonConverter
     */
    public PersonConverter() {
    }

    @Override
    public Object getAsObject(FacesContext facesContext, UIComponent component, String value) {
        if (value == null || value.length() == 0) {
            return null;
        }
        JourneyController controller = (JourneyController) facesContext.getApplication().getELResolver().
                getValue(facesContext.getELContext(), null, "journeyController");
        int hash = Integer.parseInt(value);
        Person person = controller.getSelected().getDriver();

        if (hash == (person.getEmail() + person.getFirstname() + person.getLastname() + person.getPassword()).hashCode()) {
            return person;
        }

        return null;
    }

    @Override
    public String getAsString(FacesContext fc, UIComponent uic, Object object) {
        if (object == null) {
            return null;
        }
        if (object instanceof Person) {
            Person person = (Person) object;
            return Integer.toString((person.getEmail() + person.getFirstname() + person.getLastname() + person.getPassword()).hashCode());
        } else {
            return null;
        }
    }
}


Hier ist der Ausschnitt wo ich den Converter in mein JSF File einbinde:

Code:
<h:selectOneMenu id="driver" value="#{journeyController.selected.driver}" converter="#{personConverter}">
               <f:selectItems value="#{personController.itemsAvailableSelectOne}" />
 </h:selectOneMenu>


Ich werde mal weiter recherchieren und hoff mal das ihr vielleicht einen Tipp habt für mich?

Passt die ManyToOne Beziehung vielleicht nicht bei driver in meinem Journey-Entity?
 

Fant

Bekanntes Mitglied
Fehlt dir in der @OneToMany-Annotation nicht noch ein "mappedBy"? Ob man das auch weglassen kann oder nicht weiß ich nicht, da kenn ich mich nicht gut genug aus..

Dein Konverter sieht für mich auf den ersten Blick aber etwas merkwürdig aus. Hast du dir vor dem Speichern mal ausgeben lassen, was für eine Person in driver tatsächlich drin steht? Ich vermute, dass dein Konverter immer null zurückgibt, denn um eine Person in driver abzulegen brauchst du doch die getAsObject-Methode vom Konverter. In dieser greifst du nun aber schon auf dieses Feld zu.

Einen HashCode würde ich da nicht verwenden, denn der liefert dir keine eindeutige Zuweisung von einem HashCode zum passenden Objekt. Außerdem wird der Benutzer sich doch unter dem HashCode nix vorstellen können, wenn er diesen sieht. Nimm doch z.B. die ID + Vor- und Nachname. In der getAsObject-Methode extrahierst du die ID aus dem String und suchst über den EntityManager die passende Person. Es gibt natürlich noch zig andere Varianten .. per Google-Suche findest du da schnell zahlreiche Anregungen.
 

TimSkyp

Mitglied
Ich komm mir zwar schon richtig blöd bei meinen Fragen vor, aber ich kenn mich im Moment überhaupt nicht mehr aus :oops:

Ich hab bei meinem PersonController eine innere Klasse die heißt PersonControllerConverter.
Kann ich die vielleicht verwenden um meinen driver in eine Person zu convertieren oder muss ich wirklich eine eigenen Converter schreiben?

Hier is mal die innere Klasse PersonControllerConverter:

Java:
@FacesConverter(forClass = Person.class)
    public static class PersonControllerConverter implements Converter {

        @Override
        public Object getAsObject(FacesContext facesContext, UIComponent component, String value) {
            if (value == null || value.length() == 0) {
                return null;
            }
            PersonController controller = (PersonController) facesContext.getApplication().getELResolver().
                    getValue(facesContext.getELContext(), null, "personController");
            return controller.ejbFacade.find(getKey(value));
        }

        java.lang.Long getKey(String value) {
            java.lang.Long key;
            key = Long.valueOf(value);
            return key;
        }

        String getStringKey(java.lang.Long value) {
            StringBuilder sb = new StringBuilder();
            sb.append(value);
            return sb.toString();
        }

        @Override
        public String getAsString(FacesContext facesContext, UIComponent component, Object object) {
            if (object == null) {
                return null;
            }
            if (object instanceof Person) {
                Person o = (Person) object;
                return getStringKey(o.getId());
            } else {
                throw new IllegalArgumentException("object " + object + " is of type " + object.getClass().getName() + "; expected type: " + PersonController.class.getName());
            }
        }
    }


wenn ja wie?
 

TimSkyp

Mitglied
Also, ich hab jetzt endlich eine funktionierende Lösung gefunden :D

Ich möcht mich noch mal bei allen Helfern bedanken, und möchte hier meine Lösung dokumentieren, falls sonst noch wer einmal das selbe Problem hat wie ich! :)

Ich hab in meine Person Entity-Klasse eine Methode hinzugefügt:

Java:
public Converter getConverter() {
        return new Converter() {

            @PersistenceContext
            EntityManager entityManager;

            @Override
            public Object getAsObject( FacesContext fc, UIComponent uic, String string) {
                return (string == null) ? null : entityManager.find(Person.class, Long.parseLong(string));
            }

            @Override
            public String getAsString(FacesContext fc, UIComponent uic, Object o) {
                return (o == null) ? null : Long.toString(((Person) o).getId());
            }
        };
    }

und eine equals-Methode:

Java:
 @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Person other = (Person) obj;
        if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }


aufgerufen wird diese folgend in meinem JSF file:

Code:
 <h:selectOneMenu id="driver" value="#{journeyController.selected.driver}" 
              converter="#{Person.converter}" >
             <f:selectItems value="#{personController.itemsAvailableSelectOne}"/>
  </h:selectOneMenu>


Wünsch allen Lesen noch einen wunder schönen Tag!! :):)
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
bueseb84 Spring Boot Entity mit Liste Allgemeine Java-Themen 4
P Entity Objekt Methoden vs Service methoden Allgemeine Java-Themen 2
U EJB Entity mit List Problem Allgemeine Java-Themen 2
T JPA Entity im Client-Server-Umfeld Allgemeine Java-Themen 19
G Entity Objekt Allgemeine Java-Themen 2
I Mehrere Klassen mit den selben Daten Allgemeine Java-Themen 5
Zrebna Wie ermittelt man alle testbaren (zu testenden) Klassen in seinem Maven-Projekt? Allgemeine Java-Themen 23
8u3631984 Jacoco Testcoverage bei Abstracten Klassen in verschachtelten Modulen Allgemeine Java-Themen 6
Encera Gleichzeitiges Ausführen und verbinden von 2 Java-Klassen über die Eingabeaufforderung und Eclipse Allgemeine Java-Themen 21
8u3631984 Problem beim Mocken von Record Klassen Allgemeine Java-Themen 4
B Ein Objekt einer Klasse mehreren anderen Klassen zur Verfügung stellen? Allgemeine Java-Themen 6
B Java Reflection Probleme beim wehcselseitigen Referenzieren zweier Klassen/Objekte Allgemeine Java-Themen 14
P9cman java.Lang Klassen fehlen in JRE System Library Allgemeine Java-Themen 1
B Wie kann ich mein 8 Klassen Gebilde objektorientierter schreiben? Allgemeine Java-Themen 114
N abstracte klassen methoden Allgemeine Java-Themen 32
W Klassen Zugriff auf ein Textfile aus allen Klassen. Allgemeine Java-Themen 2
M Klasse durch Klassen Aufteilung verbessern, aber wo? Allgemeine Java-Themen 1
stormyark Problem beim Klassen erstellen Allgemeine Java-Themen 1
M Kann man Annotationen auf Klassen einschränken die ein Interface implementieren? Allgemeine Java-Themen 1
nonickatall Methoden Kann man Klassen/Methoden aus Variablen heraus aufrufen? Allgemeine Java-Themen 6
H Interface PluginSystem ClassNotFound exception für library Klassen Allgemeine Java-Themen 10
L Classpath Zur Laufzeit bestimmte Klassen in Classloader hinzufügen? Allgemeine Java-Themen 4
P Abstrakte Klassen vs. Interface Allgemeine Java-Themen 4
I Klassen aus Jar-Dateien aus anderem Ordner laden Allgemeine Java-Themen 3
D OOP Gemeinsamen ID-Raum für zwei Klassen implementieren Allgemeine Java-Themen 7
B Problem mit meinen Klassen Allgemeine Java-Themen 6
I Array Parameter mit 2 Klassen - NullPointerException Allgemeine Java-Themen 3
F ArrayList`s in Klassen mit Getter/Setter Allgemeine Java-Themen 8
F Code in Klassen bringen Allgemeine Java-Themen 4
J Problem beim Generischen Klassen und Interfaces Allgemeine Java-Themen 2
F Klassen Verwendung abstrakter Klassen Allgemeine Java-Themen 9
W Variablenübergabe über mehrere Klassen Allgemeine Java-Themen 4
B Vererbung Interface und implementierende Klassen Allgemeine Java-Themen 8
D Klassen JLabels in anderen Klassen verwenden. Allgemeine Java-Themen 7
H Klassen LibGDX - Verschiedene Klassen als Value in einer Map Allgemeine Java-Themen 8
J Best Practice Objekt an alle Klassen verteilen ( Discord Bot ) Allgemeine Java-Themen 7
A Anonyme Klassen - Interface Allgemeine Java-Themen 5
ReinerCoder auf Klassen innerhalb eines package zugreifen Allgemeine Java-Themen 22
J Tetris Probleme bei Klassen Allgemeine Java-Themen 14
cool_brivk24 Klassen Klassen Aufruf Fehlgeschlagen Allgemeine Java-Themen 14
S Parametrisierte jUnit 5-Tests mit eigenen Datentypen/Klassen-Objekten als Test-Parameter Allgemeine Java-Themen 0
rentasad Design-Frage - Interfaces, Klassen, statische Methoden Allgemeine Java-Themen 3
S Klassen Abstrakte Klassen Allgemeine Java-Themen 5
T Log4J - Deaktivierung für einzelne Klassen Allgemeine Java-Themen 7
Tommy Nightmare Klassen Globale Klassen erstellen Allgemeine Java-Themen 7
X Klassen aus jar in jar Laden Allgemeine Java-Themen 1
S Klassen Klassen "virtuell" erstellen Allgemeine Java-Themen 5
J Aus mehreren Klassen ein Datei ausführbare machen Allgemeine Java-Themen 6
S equals-Methode bestimmer Klassen abfangen Allgemeine Java-Themen 2
M Klassen Eine Klasse in mehreren Klassen einbinden Allgemeine Java-Themen 11
Sin137 Struktur der Klassen & Package Allgemeine Java-Themen 2
G Klassen und interne Klassen Allgemeine Java-Themen 1
S Klassen übergeben Allgemeine Java-Themen 13
C Klassen und Konstruktor Allgemeine Java-Themen 2
S Classpath Wie kann ich Java-Library Klassen "verstecken"..? Allgemeine Java-Themen 4
A Java speech - 2 Klassen Allgemeine Java-Themen 1
V Wie kann ich die Fragen mit den anderen Klassen verbinden? Allgemeine Java-Themen 1
T Schlüsselworte mehrere public-Klassen in einem Paket Allgemeine Java-Themen 7
V Klassenname von allen Klassen mit einer bestimmten Eigenschaft bekommen Allgemeine Java-Themen 2
B Classpath Eclipse findet importierte Klassen nicht Allgemeine Java-Themen 1
C DBConnection als Methode in mehreren Klassen Allgemeine Java-Themen 4
C Arten von Klassen Allgemeine Java-Themen 3
7 Verbinden von Mehreren Klassen Allgemeine Java-Themen 29
A Klassen ein Interface aufzwingen Allgemeine Java-Themen 4
O Java-Obfuscator, welcher einzelne Methoden, Klassen und Ordnerstrukturen ausnehmen kann. Allgemeine Java-Themen 1
A also definition von klassen und string methoden und algorithmik Allgemeine Java-Themen 13
D Problem bei Vererbung abstrakter Klassen Allgemeine Java-Themen 6
M Interface Generische Klassen mit mehreren Typen überschreiben Allgemeine Java-Themen 0
L OOP Klassen-Design (static oder nicht?) Allgemeine Java-Themen 3
X Eigene Annotation - mit Bedingung für ganze Klassen oder Methoden Allgemeine Java-Themen 2
O Klassen Programm in Klassen unterteilt, werte werden nicht mehr übernommen Allgemeine Java-Themen 3
J C++ Projekt (QT) in Java mit Klassen (nicht imperativ) nutzen (BridJ? JavaCPP? SWIG? JNA? JNI?) Allgemeine Java-Themen 2
T Datentypen Eine Liste - verschiedenen Klassen - eine Abstracte Klasse Allgemeine Java-Themen 3
S .jar hat nicht alle Klassen ??? Allgemeine Java-Themen 10
S Polymorphie Polymorphismus bei Abstrakten Klassen Allgemeine Java-Themen 2
S Tool um mehrere Klassen in einer Klasse vereinen? Allgemeine Java-Themen 6
T Wie kann ich alle existierenden Java-Klassen anzeigen lassen? Allgemeine Java-Themen 10
Landei Welche Klassen fehlen im JDK? Allgemeine Java-Themen 18
S Kapselung Statische Helper Klassen Allgemeine Java-Themen 5
A Vererbung Klassen-Downcasting wirft ClassCastException Allgemeine Java-Themen 2
N Java Klassen mit ID Allgemeine Java-Themen 21
antonbracke Klassen Klassen gegenseitig laden Allgemeine Java-Themen 4
R SecurityManager für einzelne Klassen/Threads? Allgemeine Java-Themen 38
T Java Klassen aus externer .jar laden und ausführen Allgemeine Java-Themen 3
M OO / Klassen / Projektstruktur Allgemeine Java-Themen 5
O Klassen werden nicht importiert Allgemeine Java-Themen 3
E selber Klassen kompilieren/ prüfen Allgemeine Java-Themen 5
Z Abstrakte Klassen /Interface Allgemeine Java-Themen 5
A Klassen und JLabel's Allgemeine Java-Themen 12
J Java-Implementierung diverser Beziehungen zwischen Klassen bzw. Objekten Allgemeine Java-Themen 2
M Methoden/Klassen für andere Projekte Allgemeine Java-Themen 4
J Suche: Tool zum Auffinden gleichnamiger Klassen (Name und Package gleich) in unteschiedlichen JARs Allgemeine Java-Themen 5
E instanceof mit nicht öffentlichen Klassen Allgemeine Java-Themen 2
D Datentypen Typbestimmung unbekannter Wrapper-Klassen Allgemeine Java-Themen 5
S Klassen in einer Schleife durchlaufen Allgemeine Java-Themen 11
X Generic muss zwei Klassen/Interfaces erfüllen Allgemeine Java-Themen 5
N Vergleich eigener Klassen Allgemeine Java-Themen 5
M Klassen Array aus Klassen bestimmter Klassen ? Allgemeine Java-Themen 11
C OOP Klassen mit "Eigenschaften" Allgemeine Java-Themen 10
H Klassen kommunizieren lassen Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben