JPA Self-Join mit JoinTable
Habe ich 1 entity-Aufruf Posten, in dem ich sein will, in der Lage, übergeordnete Elemente für Kinder. die Verwendung eine join-Tabelle zu erstellen, die eine Eltern/Kind-Beziehung. Ich habe nicht in der Lage zu bekommen, eine gute Dokumentation auf. Also, wenn jemand irgendwelche Gedanken bin ich alle Ohren.
Hier ist was ich habe... die meiste Zeit über funktioniert.
public class Item implements java.io.Serializable {
@Id
private Long id;
@ManyToOne(optional = true, fetch = FetchType.LAZY)
@JoinTable(name = "ITEMTOITEM", joinColumns = { @JoinColumn(name = "ITEMID") }, inverseJoinColumns = { @JoinColumn(name = "PARENTITEMID") } )
private Item parent;
@OneToMany(mappedBy = "parent", fetch = FetchType.LAZY)
private List<Item> children;
}
Manchmal, wenn ich will, um wieder Objekte, die gebunden sind, um dieses Element der Tabelle, erhalte ich eine Fehlermeldung der folgenden:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.webflow.engine.ActionExecutionException: Exception thrown executing [AnnotatedAction@6669ff5 targetAction = com.assisted.movein.web.common.nav.NavAction@6edf74b7, attributes = map['method' -> 'handleEntry']] in state 'oneTimeChargesAndFeesView' of flow 'in-flow' -- action execution attributes were 'map['method' -> 'handleEntry']'; nested exception is Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2.0.1 (Build b04-fcs (04/11/2008))): oracle.toplink.essentials.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: ORA-00904: "PARENTITEM_ITEMID": invalid identifier
Error Code: 904
Call: SELECT ITEMID, ITEMSHORTDESC, EFFENDDATE, ITEMDESC, PARENTITEM_ITEMID, ITEMTYPECODE FROM ITEM WHERE (ITEMID = ?)
bind => [1250]
Query: ReadObjectQuery(com.domain.Item)
Jede mögliche Hilfe würde geschätzt.
- Hier habe ich zusammen die Tabelle Diagramm hier.
- Der Letzte kleine Nachteil ist, ich brauche das für die Arbeit mit eclipselink und toplink-essentials. Also ich bin beschränkt sich auf die Verwendung der JPA-1.0-Zuordnungen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen
@JoinColumn
statt:Ich glaube, @JoinTable ist nur erlaubt auf eine @OneToOne oder @OneToMany oder @ManyToMany, ich glaube nicht, dass es keinen Sinn macht, auf eine @ManyToOne. Verwenden Sie ein @JoinColumn, oder eine @OneToOne.
Auch Ihre @OneToMany nicht sinnvoll, das mappedBy muss ein Attribut und Sie haben kein parentItem, sollte es sein, die Eltern, und die Eltern sollten ein @JoinColumn.
Nach viel Lesen auf JPA 2.0 ich herausgefunden, dass ich brauchte eine neuere version von Eclipselink 2.3+, um das zu unterstützen, was ich versuche zu tun. Hier ist der code, der tatsächlich funktioniert hat, in meinem Fall, aber es wird nicht funktionieren aufgrund unserer Abhängigkeit von einer älteren version [EclipseLink 2.0.2]. Auch ein anderes Projekt ist immer noch mit Toplink-essentials JPA 1.0, die immer noch wie diese notation.