PropertyNotFound - Exception (Anfängerfrage?)

Dieses Thema PropertyNotFound - Exception (Anfängerfrage?) im Forum "Data Tier" wurde erstellt von FINF_AW_Alex, 18. Nov. 2014.

Thema: PropertyNotFound - Exception (Anfängerfrage?) Hallo zusammen! Ich bin relativ neu in Java und auch in JPA und arbeite mich gerade durch ein Buch um die...

  1. Hallo zusammen!

    Ich bin relativ neu in Java und auch in JPA und arbeite mich gerade durch ein Buch um die Beziehungen und zugehörigen Annotationen zu verstehen.

    Ich habe jetzt zwei Entitys erstellt und die Entity "Kunde" mit der Entity "Adresse" per OnetoOne verknüpft. Die property "strasse" spreche ich über einen EL Ausdruck in JSF an.

    Wenn ich nun Daten in die "Adresse" schreiben will findet er die verknüpfte Propperty nicht.


    001.PNG


    hat jemand einen Rat?

    viele Grüße, Alex !!

    HTML:

            <h:form id="form_gruppe">    
               
                <h:panelGrid     columns="2"  cellpadding="5" >
                    <h:outputLabel   for="nname"  value="Nachname : "/>
                    <h:inputText     id="nname"   value="#{beispielPM.kunde.nachname}"/>
                    <h:outputLabel   for="vname"  value="Vorname : "/>
                    <h:inputText     id="vname"   value="#{beispielPM.kunde.vorname}"/>
                    <h:outputLabel   for="strasse"  value="Strasse : "/>
                    <h:inputText     id="strasse"   value="#{beispielPM.kunde.adresse.strasse}"/>
                </h:panelGrid>
               
                <h:commandButton value="add"  action="#{beispielPM.storeKunde()}"/>
           
            </h:form>

     
    Presentation Modell:
    Code (Java):

    @Named
    @RequestScoped
    public class BeispielPM {
       
        private Kunde   kunde   = new Kunde();
        private Adresse adresse = new Adresse();
       
       
        @EJB
        JpaBean bean;
       
       
    //------GETTER&SETTERS---------------------------

        public Adresse getAdresse() {
            return adresse;
        }

        public void setAdresse(Adresse adresse) {
            this.adresse = adresse;
        }
       
        public Kunde getKunde() {
            return kunde;
        }

        public void setKunde(Kunde kunde) {
            this.kunde = kunde;
        }
       
    //------METHODS----------------------------------    
        public void storeKunde(){
            bean.addKunde(kunde);
            System.out.println("Kunde gespeichert!");
        }    
       
    }
     
    BEAN:
    Code (Java):
    @Named
    @Stateless
    public class JpaBean {
       
        @PersistenceContext
        EntityManager em;

       
        public void addKunde(Kunde kunde){
            em.persist(kunde);
            System.out.println("Kunde hinzugefügt!");
        }
    }
    Kunde:
    Code (Java):
    @Entity
    public class Kunde implements Serializable {
        private static final long serialVersionUID = 1L;
       
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long id;

        private String vorname;
        private String nachname;
        private String anrede;
        private String geburtsdatum ;
       
        @OneToOne(optional = false, cascade = CascadeType.ALL)
        @JoinColumn(name="adresse",nullable = false)
        private Adresse adresse;
     
    Zuletzt bearbeitet: 18. Nov. 2014
  2. Vielleicht hilft dir das Java-Tutorial weiter. Hier klicken --> (Klick)
  3. Joose
    Joose Mitarbeiter
    Du greifst auf "kunde.adresse.strasse" zu. Ich gehe davon aus das "adresse" null ist und deswegen die Exception fliegt.
    Laut deinem Code erstellst du in BeispielPM ein Objekt der Klasse Kunde. Dieses Objekt enthält zwar ein Attribut vom Typ Adresse, dieses ist aber nicht initialisiert! Daher die Exception.
    Du darfst den Wert nicht direkt zum Kunden schreiben sondern musst dein Adresse Objekt von Beispiel PM nehmen!
     
  4. Hey Joose ! :)

    Danke für die schnelle Antwort, ich hatte am anfang auch den zugriff auf das Adressenobjekt vom PM

    HTML:

            <h:form id="form_gruppe">    
               
                <h:panelGrid     columns="2"  cellpadding="5" >
                    <h:outputLabel   for="nname"  value="Nachname : "/>
                    <h:inputText     id="nname"   value="#{beispielPM.kunde.nachname}"/>
                    <h:outputLabel   for="vname"  value="Vorname : "/>
                    <h:inputText     id="vname"   value="#{beispielPM.kunde.vorname}"/>
                    <h:outputLabel   for="strasse"  value="Strasse : "/>
                    <h:inputText     id="strasse"   value="#{beispielPM.adresse.strasse}"/>
                </h:panelGrid>
               
                <h:commandButton value="add"  action="#{beispielPM.storeKunde()}"/>
           
            </h:form>
     
    Allerdings wird so nur der Kunde geschrieben und die Adresse nicht. Es gibt auch keine Exception... komisch oder? ???:L

    Ich hab es dann umgeändert weil ich dachte "die Tabelle Adresse ist doch auch ein Teil von der Kunden Tabelle" desshalb dacht ich vielleicht muss ich direkt auf das Adressenobjekt in der KundeEntity zugreifen (KUNDE Zeile 16).
     
  5. Joose
    Joose Mitarbeiter
    Ist natürlich logisch das dann nur der Kunde in die Datenbank kommt ohne Adresse.
    Du erzeugst ein Adresse Objekt und ein Kunde Objekt, stellst aber nie eine Verbindung zwischen den beiden her.

    Also: Verwende wie oben schon im Code vorhanden 2 Objekte (1xAdresse, 1xKunde) und bevor du den Kunden in die Datenbank schreibst fügst du dem Kunden die Adresse hinzu.
     
  6. Ja geil !!!

    hat geklappt !!!

    Code (Java):

    public class BeispielPM {
       
        private Kunde   kunde   = new Kunde();
        private Adresse adresse = new Adresse();
       
       
        @EJB
        JpaBean bean;
       
     //------METHODS----------------------------------    
        public void storeKunde(){
            kunde.setAdresse(adresse);     //<<--- das hab ich geändert
            bean.addKunde(kunde);
            System.out.println("Kunde gespeichert!");
        }
     
    vielen Dank !!
     
  7. Schau dir jetzt hier den Kurs an und lernen Java zu programmieren: --> Hier klicken, um mehr zu erfahren (Klick)