Question

Je suis en train de travailler sur un GXT projet à l'aide de JPA pour la persistance, mais je suis confronté à un problème avec bidirectionnel relation persistance.

J'ai ces deux Entités :

    @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;
    }

Et :

    @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>();
    }

(Je n'ai pas de copie des getters et setters, mais ces méthodes.)

Pour la persistance de ActvReqProxy, il est fait de cette façon dans mon EditorPresenter :

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

Et la réponse pplActvRight est déjà la valeur null dans la réponse que je reçois, mais dans getModel() pplActvReqProxy est réglé.

Sur le côté serveur, j'ai un service qui appelle la méthode suivante de mon DAO :

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

Et quand j'essaie de conserver un ActvReqProxy de mon éditeur, à l'aide de la méthode avec("pplActvRight","les gens",actvType"), je ne reçois pas toutes les erreurs, mais dans ma DB, l'entité n'est pas entièrement conservées.Je veux dire une nouvelle ActvReq est créé dans la base de données mais le champ PPL_ACTV_RIGHT_ID reste nulle.(Il fonctionne très bien pour les gens et actvTyp)

EDIT :En fait, je suppose que le problème est situé sur GWT Résolveur dans resolveDomainValue, il ne peut pas résoudre l'attribut pplActvRight.C'est comme si mon EntityProxy objet n'existe pas sur le serveur-côté.

Des idées?

Était-ce utile?

La solution

Donc, au début de persistAndReturn côté serveur, il est déjà null?Si oui, alors nous savons au moins qu'il n'a rien à voir avec JPA.

Et vous êtes sûr que côté client, il est réglé sur autre chose que null sur proxy avant d'appeler persistAndReturn?Vous pouvez facilement le vérifier:à l'aide d'Eclipse débogueur, il est possible de voir le code JSON à laquelle procuration sera sérialisé (l'un des champs de proxy que vous pouvez voir lorsque vous sélectionnez l'objet proxy dans le débogueur).Assurez-vous que pplActvRight la clé est là, avec pas la valeur null.

Si oui, peut-être que vous devez déboguer GWT code source qui se traduit par des procurations à côté serveur entités de vérifier ce qui est fait avec cette pplActvRight propriété (pourquoi n'est-il pas affecté correspondant ActvReq côté serveur, par exemple).Je ne me souviens pas ce que le nom de la classe de faire ce genre de choses était, mais si vous ne serez pas en mesure de le trouver je peux rechercher pour vous.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top