سؤال

ما زلت أتعلم كيفية إعداد هذه التعيينات باستخدام تعليقات JPA بحيث يكون هذا خطأ مبتدئًا.

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

في تعيين هذه الفئات ، كتبت الرمز التالي أدناه:

@Entity
public class User extends BaseModel {

 @OneToMany(mappedBy="course")
 private Collection<Course> courses;

 public void setCourses(Collection<Course> courses) { this.courses = courses; }

 public Collection<Course> getCourses() { return courses; }

}

@Entity
public class Course extends BaseModel {

 @ManyToOne
 @JoinColumn(name="user_id")
 private User user;

 public void setUser(User user) { this.user = user; }

 public User getUser() { return user; }

}

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

أتلقى nullpointerxception عندما أحاول الاتصال بـ SELECT على جدول المستخدم. ومع ذلك ، عندما أخرج الإشارات إلى فئة الدورة التدريبية في فئة المستخدم ، كل شيء يعمل بشكل جيد تمامًا.

الخط المعني في صف DAO الخاص بي. ربما يفشل مدير الكيان في التهيئة. ها هو الرمز.

Query query = Stripersist.getEntityManager().createQuery(getQuery(fieldName, null)).setParameter(fieldName, value);

CreateEquery () فقط يعود:

String query = "FROM " + entityClass.getName() + " t WHERE t." + fieldName + " = :" + fieldName;

أنا أستخدم إطار عمل Stripes و Hibernate و Stripersist إذا كان ذلك يوفر أي أدلة أخرى حول الخطأ.

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

المحلول

من النظرة الأولى ، يبدو أنك يجب أن تكتب:

@OneToMany(mappedBy="user") 
private Collection<Course> courses; 

بمعنى آخر. في onetomany medpedby يجب أن تشير إلى الحقل الذي يشير إلى الكائن الحالي.

نصائح أخرى

يشير MedpedBy إلى أن الكيان في هذا الجانب هو عكس العلاقة ، ويقيم المالك في الكيان "الآخر". في حالتك ، كما يجب أن يكون Axtavt هو:

@OneToMany(mappedBy="user")
private Collection<Course> courses;

ينص على أنه يمكن للمستخدم اختيار العديد من الدورات التدريبية والدورة التي تحمل ملكية هذه العلاقة.

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