سؤال

نحن نحاول استخدام علاقة onetomany الأساسية:

@Entity
@Table(name = "PARENT_MESSAGE")
public class ParentMessage {

 @Id
 @Column(name = "PARENT_ID")
 @GeneratedValue(strategy = GenerationType.IDENTITY)
 private Integer parentId;

 @OneToMany(mappedBy="parentMsg",fetch=FetchType.LAZY)
 private List childMessages;

 public List getChildMessages() {
  return this.childMessages;
 }
 ...
}

@Entity
@Table(name = "CHILD_MSG_USER_MAP")
public class ChildMessage {

 @Id
 @Column(name = "CHILD_ID")
 @GeneratedValue(strategy = GenerationType.IDENTITY)
 private Integer childId;

 @ManyToOne(optional=false,targetEntity=ParentMessage.class,cascade={CascadeType.REFRESH}, fetch=FetchType.LAZY)
 @JoinColumn(name="PARENT_ID")
 private ParentMessage parentMsg;

 public ParentMessage getParentMsg() {
  return parentMsg;
 }
 ...
}
   ChildMessage child = new ChildMessage();
   em.getTransaction().begin();
   ParentMessage parentMessage = (ParentMessage) em.find(ParentMessage.class, parentId);
   child.setParentMsg(parentMessage);
   List list = parentMessage.getChildMessages();
   if(list == null) list = new ArrayList<ChildMessage>();
   list.add(child);
   em.getTransaction().commit();

نتلقى الخطأ التالي. لماذا OpenJPA تسلسل أسماء الجدول إلى APP.PARENT_MESSAGE_CHILD_MSG_USER_MAP؟ بالطبع هذا الجدول غير موجود .. الجداول المحددة APP.PARENT_MESSAGE و APP.CHILD_MSG_USER_MAP

سبب: org.apache.openjpa.lib.jdbc.ReportingSqlexception: الجدول/العرض "App.parent_message_child_msg_user_map" غير موجود. {select t1.child_id ، t1.parent_id ، t1.created_time ، t1.user_id من app.parent_message_child_msg_user_map t0 inner join app.child_msg_user_map t1 on t0.childmessages_child_id = 42x05

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

المحلول

قد ترغب في إضافة سمة mappedby إلى الجانب المملوك للعلاقة. هذا يخبر JPA بأنه مجرد relatiuonship وليس علاقتين مختلفتين. ربما على الجانب الكبير.

نصائح أخرى

يجب عليك استخدام @JoinColumn ومحتمل @JoinColumns التعليقات التوضيحية كذلك على علاقات الكيان الخاصة بك لإخبار JPA كيفية حل العلاقة. لاحظ أنه عليك تحديد تلك الحقول الموجودة بالفعل في كيان مثل insertable=false, updatable=false نظرًا لأنه لا يمكنك الحصول على حقلين قادرين على الكتابة مع نفس الاسم في كيان.

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