我们试图使用一个基本@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_MESSAGEAPP.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 FROM   APP.PARENT_MESSAGE_CHILD_MSG_USER_MAP   T0 INNER JOIN   APP.CHILD_MSG_USER_MAP T1 ON   t0.CHILDMESSAGES_CHILD_ID =   t1.CHILD_ID WHERE   t0.PARENTMESSAGE_PARENT_ID =?}   [代码= 30000,状态= 42X05]

有帮助吗?

解决方案

您可能需要一个的mappedBy属性添加到关系的持有端。这告诉JPA,这是唯一一个relatiuonship,而不是两个不同的关系。也许在许多侧。

其他提示

您不得不使用@JoinColumn并可能@JoinColumns注解以及你的实体关系告诉JPA如何计算出的关系。注意你必须,因为你不能有两个可写的领域与实体相同的名称来指定那些已经存在于实体insertable=false, updatable=false领域。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top