مشاكل مع تملكها واحدة إلى علاقات واحدة وعلاقات الوالدين / الطفل

StackOverflow https://stackoverflow.com/questions/1140578

  •  16-09-2019
  •  | 
  •  

سؤال

لدي ثلاثة مستخدمين، شركة، الشركة والعنوان مع تصريحات مثل ذلك:

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class User implements Serializable {
  @PrimaryKey
  @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  private Key key;

  @Persistent(mappedBy="creator")
  @Order(extensions = @Extension(vendorName="datanucleus", key="list-ordering", value="title asc"))
  private Collection<Company> companies;

  @Persistent
  private Address address;
  . . . 
}

public class Company implements Serializable {
  @PrimaryKey
  @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  private Key key;

  @Persistent
  @Extension(vendorName="datanucleus", key="gae.parent-pk", value="true")
  private Key creatorKey;

  @Persistent
  private User creator;

  @Persistent
  private Address address;
  . . .
}

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Address implements Serializable{
  @PrimaryKey
  @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  private Key key;
  . . .
}

بعد إنشاء مستخدم، اتصلت بعد ذلك بشركتين مملوكة من قبل مستخدم بعد تعيين عناوينهم ومعلومات أخرى مثل ذلك:

company.setCreatorKey(currentUser.getKey());
pm.makePersistent(company);

تنشأ المشكلة عندما أسترد شركة ومن هذا الكائن المرجعي للمبدع. يبدو أن JDO يعتقد أن عناوين الشركتين تنتمي إلى المستخدم بدلا من الشركات ويتم تسجيل الخطأ التالي:

address is mapped as a 1 to 1 relationship but there is more than one enity of kind Address that is a child of User(email@email.com) 

مفتاح المستخدم هو

User(email@email.com)

مفتاح الشركة هو

User(email@email.com)\Company(1) 

ومفتاح عناوينين

User(email@email.com)\Company(1)\Address(1) 
User(email@email.com)\Company(1)\Address(2)

أنا جديد جدا في قواعد البيانات الهرمية، لذا كنت أتساءل عن سبب استمرار / تفسر عناوين / تفسير كأطفال من المستخدمين بدلا من أحفاد المستخدمين وأطفال الشركة. ما هو التسلسل الهرمي الصحيح لموقف مثل هذا؟ شكرا.

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

المحلول

ما إصدار محرك التطبيق SDK الذي تستخدمه؟ في يوم الاثنين أصدروا واحدة جديدة تتضمن الكثير من الإصلاحات لقضايا JDD. فيملاحظات الإصدار) يجب أن تفعل أربعة أو خمسة من الإصلاحات مع العلاقات بين الكائنات، لذلك من الممكن حل هذه المشكلة، أو كسر بطريقة جديدة :) Otoh، قد تكون مشكلتك مرتبطة بهذا تذكرة.

أنا جديد جدا في قواعد البيانات الهرمية، لذا كنت أتساءل عن سبب استمرار / تفسر عناوين / تفسير كأطفال من المستخدمين بدلا من أحفاد المستخدمين وأطفال الشركة.

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

User(email@email.com)
Company(1)\Address(1) 
Company(1)\Address(2)

لا يعرف مؤخرة البيانات بالضرورة عن تعيينات واحدة أو واحدة إلى العديد من التعيينات. إنه يتيح لك فقط مفاتيح الكيانات الأخرى كما تريد. ومع ذلك، فإن طبقة JDO تلقائيا تضع جميع الكيانات في علاقة مملوكة في نفس مجموعة الكيان، بحيث يمكن أن تنفذ أن التغييرات تحدث بطريقة معاملات.

مع كل ما يقال، يبدو هيكلك موافق لي. يبدو أن طبقة JDO هي مجرد التحقق من أي أحفاد مجموعة الكيان من العنوان الرقيقة، بدلا من النظر إليها على وجه التحديد لأحد الأطفال المباشر للشركة.

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