1

親アイテムを子にリンクできるようにするエンティティ呼び出しアイテムが 1 つあります。結合テーブルを使用して親子関係を作成します。適切なドキュメントを入手できませんでした。だから誰かが何か考えているなら、私はすべて耳を傾けています。

これが私が持っているものです...ほとんどの場合機能します。

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;
}

この項目テーブルに関連付けられているオブジェクトを元に戻したい場合、次のエラーが発生します。

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)

どんな助けでも大歓迎です。

4

3 に答える 3

5

@JoinColumn代わりに使用してみてください:

 @ManyToOne(optional = true, fetch = FetchType.LAZY)
 @JoinColumn(name = "PARENTITEMID", referencedColumnName = "ITEMID")
 private Item parent;

 @OneToMany(
        cascade = {CascadeType.ALL},
        orphanRemoval = true,
        fetch = FetchType.LAZY
 )
 @JoinColumn(name = "PARENTITEMID")
 private List<Item> children;
于 2013-03-05T08:11:33.023 に答える
1

JPA 2.0を何度も読んだ後、自分がやろうとしていたことをサポートするために、新しいバージョンのEclipselink2.3以降が必要であることがわかりました。これが私の場合に実際に機能したコードですが、古いバージョン[EclipseLink2.0.2]に依存しているため機能しません。また、別のプロジェクトでもToplink-essentials JPA 1.0を使用していますが、これもこの表記法が好きです。

public class Item {

@ManyToOne(optional = true, fetch = FetchType.LAZY)
@JoinTable(name = "ITEMINCENTIVESMAPPING", 
        joinColumns = { @JoinColumn(name = "INCENTIVEITEMID", referencedColumnName = "ITEMID", insertable = false, updatable = false) }, 
        inverseJoinColumns = { @JoinColumn(name = "ITEMID", referencedColumnName = "ITEMID", insertable = false, updatable = false) } )
private Item parentItem;

@OneToMany(fetch = FetchType.LAZY)
@JoinTable(name = "ITEMINCENTIVESMAPPING", 
        joinColumns = { @JoinColumn(name = "INCENTIVEITEMID", referencedColumnName = "ITEMID") }, 
        inverseJoinColumns = { @JoinColumn(name = "ITEMID", referencedColumnName = "ITEMID") } )
private List<Item> items;

}
于 2013-03-21T19:14:19.663 に答える
0

@JoinTable は @OneToOne または @OneToMany または @ManyToMany でのみ許可されていると思いますが、@ManyToOne では意味がないと思います。@JoinColumn または @OneToOne を使用します。

また、@OneToMany は意味がありません。mappedBy は属性である必要があり、parentItem がなく、親である必要があり、親は @JoinColumn を使用する必要があります。

于 2013-03-05T15:38:49.813 に答える