Frage

Wir versuchen, eine grundlegende @OneToMany Beziehung zu verwenden:

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

Wir erhalten folgende Fehler. Warum ist verketten OpenJPA die Tabellennamen APP.PARENT_MESSAGE_CHILD_MSG_USER_MAP? Natürlich, dass Tabelle nicht existiert .. die definierten Tabellen sind APP.PARENT_MESSAGE und APP.CHILD_MSG_USER_MAP

  

Verursacht durch:   org.apache.openjpa.lib.jdbc.ReportingSQLException:   Tabellenansicht   'APP.PARENT_MESSAGE_CHILD_MSG_USER_MAP'   ist nicht vorhanden. {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   t0.CHILDMESSAGES_CHILD_ID =   t1.CHILD_ID WHERE   t0.PARENTMESSAGE_PARENT_ID =?}   [Code = 30000, state = 42X05]

War es hilfreich?

Lösung

Sie können eine mappedBy Attribut an den besitzenden Seite der Beziehung hinzufügen möchten. Dies sagt JPA, dass es nur eine relatiuonship und nicht zwei unterschiedliche Beziehungen. Vielleicht auf der vielen Seite.

Andere Tipps

würden Sie haben die @JoinColumn zu verwenden und möglicherweise @JoinColumns Anmerkungen als auch auf Ihrem Entitätsbeziehungen JPA zu sagen, wie die Beziehung zu erarbeiten. Beachten Sie müssen die Felder angeben, die bereits in einer Einheit als insertable=false, updatable=false sind, da Sie nicht zwei Schreib-able Felder mit dem gleichen Namen in einer Einheit haben können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top