سؤال

أنا أعمل على مشروع غست باستخدام جبا للمثابرة ، ولكن أنا تواجه مشكلة مع استمرار العلاقة ثنائية الاتجاه.

لدي هذين الكيانين :

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

و :

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

(لم أقم بنسخ الحاصلين والواضعين ولكن توجد طرق.)

لاستمرار أكتفريكبروكسي ، انها فعلت أساسا بهذه الطريقة في بلدي إديتوربريسنتر :

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

والاستجابة بلاكتفريت هو بالفعل فارغة في استجابة أحصل ، ولكن في جيتموديل () يتم تعيين بلاكتفريكبروكسي.

على جانب الخادم لدي خدمة التي تدعو الطريقة التالية من بلدي داو :

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

وعندما أحاول أن تستمر أكتفريبروكسي من محرر بلدي ، وذلك باستخدام طريقة مع("بلاكتفريت" ، "الناس" ، أكتفتيب") ، وأنا لا تحصل على أي أخطاء ، ولكن في بلدي دب الكيان لا تستمر تماما.أعني يتم إنشاء أكتفريك جديد في دب ولكن الحقل بل_كتف_رايت لا يزال فارغا.(أنه يعمل بشكل جيد للناس و أكتفتيب)

تحرير :في الواقع أفترض أن المشكلة تقع على محلل غوت في ريسولفودومينفالو ، فإنه لا يمكن حل السمة بلاكتفرايت.يبدو الأمر كما لو أن كائن إنتيتيبروكسي الخاص بي غير موجود على جانب الخادم.

أي أفكار?

هل كانت مفيدة؟

المحلول

لذلك في بداية persistAndReturn على جانب الخادم هو بالفعل null?إذا كان الأمر كذلك ، ثم على الأقل نحن نعلم أنه لا علاقة له مع جبا.

وأنت متأكد من أنه من جانب العميل يتم ضبطه على شيء آخر غير null على الوكيل قبل الاتصال persistAndReturn?يمكنك التحقق من ذلك بسهولة:باستخدام الكسوف المصحح فمن الممكن أن نرى رمز جسون الذي سيتم تسلسل الوكيل (واحد من حقول الوكيل التي يمكنك ان ترى عند تحديد كائن وكيل في المصحح).يرجى التأكد من أن pplActvRight المفتاح موجود بقيمة غير فارغة.

إذا كان الأمر كذلك ، فربما يجب عليك تصحيح شفرة مصدر غوت التي تترجم الوكلاء إلى كيانات من جانب الخادم للتحقق مما يتم القيام به مع ذلك pplActvRight الملكية (لماذا لا يتم تعيينها إلى المقابلة ActvReq مثيل جانب الخادم).لا أستطيع أن أتذكر ما كان اسم الفئة القيام بهذه الأشياء ولكن إذا كنت لن تكون قادرة على العثور عليه يمكنني البحث عنه بالنسبة لك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top