L'attributo Resolver GWT di relazione non può essere risolto
-
12-12-2019 - |
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?
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.