Question

Nous essayons d'utiliser une relation de @OneToMany de base:

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

Nous recevons l'erreur suivante. Pourquoi OpenJPA concaténer les noms de table à APP.PARENT_MESSAGE_CHILD_MSG_USER_MAP? Bien sûr, ce tableau n'existe pas .. les tables sont définies APP.PARENT_MESSAGE et APP.CHILD_MSG_USER_MAP

  

Causé par:   org.apache.openjpa.lib.jdbc.ReportingSQLException:   Table / Voir   'APP.PARENT_MESSAGE_CHILD_MSG_USER_MAP'   n'existe pas. {SELECT t1.CHILD_ID,   t1.PARENT_ID, t1.CREATED_TIME,   t1.USER_ID DE   APP.PARENT_MESSAGE_CHILD_MSG_USER_MAP   t0 INNER JOIN   APP.CHILD_MSG_USER_MAP t1   t0.CHILDMESSAGES_CHILD_ID =   t1.CHILD_ID OÙ   t0.PARENTMESSAGE_PARENT_ID =?}   [Code = 30000, state = 42X05]

Était-ce utile?

La solution

Vous pouvez ajouter un attribut mappedBy à côté de la relation possédante. Cela dit JPA qu'il n'y a qu'un seul relatiuonship et non deux relations différentes. Peut-être sur le côté plusieurs.

Autres conseils

Il faudrait utiliser le @JoinColumn et éventuellement des annotations @JoinColumns ainsi vos relations avec l'entité à dire JPA comment travailler la relation. Notez que vous devrez spécifier les champs qui sont déjà présents dans une entité insertable=false, updatable=false puisque vous ne pouvez pas avoir deux champs d'écriture capable avec le même nom dans une entité.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top