Domanda

Sto lavorando su un progetto GXT usando JPA per persistenza, ma sto affrontando un problema con la persistenza delle relazioni bidirectivennal.

Ho quelle due entità:

    @Entity
    @Table(name = "ACTV_REQ", catalog = "erpdb")
    @AttributeOverride(name = "id", column = @Column(name = "ID", nullable = false, columnDefinition = "BIGINT UNSIGNED"))
    @NamedQueries(value = { 
            @NamedQuery(name = "findByPerson", query="select object(m) from ActvReq m where m.people= :people")
    })
    public class ActvReq extends BaseEntity {
        @ManyToOne
        @JoinColumn(name = "PPL_ID")
        @NotNull
        private People people;

        @ManyToOne
        @JoinColumn(name = "ACTV_TYP_ID")
        private ActivityTyp actvTyp;

        @ManyToOne
        @JoinColumn(name= "PPL_ACTV_RIGHT_ID")
        private PeopleActvRight pplActvRight;

        @Column(name = "DESCR")
        private String desc;
    }
.

E:

    @Entity
    @Table(name = "PPL_ACTV_RIGHT", catalog = "erpdb")
    @AttributeOverride(name = "id", column = @Column(name = "ID", nullable = false, columnDefinition = "BIGINT UNSIGNED"))
    @PeopleActvRightBeanConstraint
    @NamedQueries(value = { 
            @NamedQuery(name = "findByPeople", query="select object(m) from PeopleActvRight m where m.people= :people")
    })
    public class PeopleActvRight extends BaseEntity {

        @ManyToOne
        @JoinColumn(name="ACTV_TYP_ID")
        @NotNull    
        ActivityTyp type;

        @ManyToOne
        @JoinColumn(name="PPL_ID")
        @NotNull    
        People people;

        @ManyToOne
        @JoinColumn(name="ACTV_RIGHT_ID")
        ActvRight actvRight;

        @OneToMany(mappedBy="pplActvRight",cascade=CascadeType.ALL)
        private List<ActvReq> actvRequests = new ArrayList<ActvReq>();
    }
.

(Non ho mai copiato getter e Setter, ma i metodi dei teschi esistono.)

Per la persistenza di Actvreqproxy, è sostanzialmente fatto in questo modo nel mio editoreSenter:

    getRequestContext().persistAndReturn(getModel()).with("actvTyp","people","pplActvRight").fire(new Receiver<M>() {
        @Override
        public void onSuccess(M response) {
        unsetContext();
        onSaveSuccess( response );
        }       
    });
.

e la risposta pplactvright è già nullo nella risposta che ottengo, ma in GetModel () è impostato PPLacTvreqproxy.

sul lato server Ho un servizio che chiama il seguente metodo del mio DAO:

    public ActvReq persistAndReturn(ActvReq entity){
        em.getTransaction().begin();
        em.persist(entity);
        em.close;
        return entity;
    }
.

E quando sto cercando di persistere un ACTVreqProxy dal mio editor, usando il metodo con ("PPLactvRight", "Persone", Actvtype "), non ottengo errori, ma nel mio DB l'entità non è del tutto Persistito. Intendo un nuovo Actvreq viene creato nel DB ma il campo Ppl_actv_right_id rimane nullo. (Funziona bene per le persone e ACTVTYP)

Modifica: infatti presumo che il problema si trovi sul resolver GWT in RisolvedomainValue, non può risolvere l'attributo pplactvv. È come se il mio oggetto EntityProxy non esiste sul lato server.

Qualche idea?

È stato utile?

Soluzione

Quindi all'inizio del persistAndReturn sul lato server è già null?Se è così, allora almeno sappiamo che non ha nulla a che fare con JPA.

E sei sicuro che sul lato client è impostato su qualcosa di diverso da null sul proxy prima di chiamare persistAndReturn?Puoi verificarlo facilmente: utilizzando il debugger Eclipse è possibile vedere il codice JSON a cui il proxy sarà serializzato (uno dei campi del proxy che è possibile visualizzare quando si seleziona l'oggetto proxy nel debugger).Assicurati che la chiave pplActvRight sia lì con un valore non nullo.

In caso affermativo, forse è necessario eseguire il debug del codice sorgente GWT che traduce i proxy alle entità del server per verificare ciò che viene fatto con quella proprietà pplActvRight (perché non è stata assegnata alla corrispondente istanza del lato server ActvReq).Non riesco a ricordare cosa fosse il nome della classe che fa questa roba, ma se non sarai in grado di trovarlo, posso cercarlo per te.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top