0

このクラスのフィールド ツリーの正しいマッピングを取得できません。

@Entity
@Table(name = "SushiMapTree")
public class SushiMapTree<K, V> extends Persistable implements Map<K,V> {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="SushiMapID")
protected int ID;

@OneToOne(cascade = CascadeType.ALL)
@JoinTable(name="SushiMapTree_SushiTree")
private SushiTree<SushiMapElement<K, V>> tree = new SushiTree<SushiMapElement<K,V>>();

これは他のクラスとそのマッピングです:

@Entity
@Table(name = "SushiTree")
public class SushiTree<T> extends Persistable implements Collection<T> {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="SushiTreeID")
protected int ID;

@Column(name="Test")
private String test = "Test";

@OneToMany(cascade = CascadeType.PERSIST)
@JoinTable(name="SushiTree_SushiTreeElements")
private List<SushiTreeElement<T>> treeElements = new ArrayList<SushiTreeElement<T>>();

@OneToMany(cascade = CascadeType.PERSIST)
@JoinTable(name="SushiTree_SushiTreeRootElements")
private List<SushiTreeElement<T>> treeRootElements = new ArrayList<SushiTreeElement<T>>();

}

@Entity
@Table(name = "SushiMapElement")
public class SushiMapElement<K, V> extends Persistable {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int ID;

@ManyToOne(cascade = CascadeType.PERSIST)
private SushiMapElement<K, V> parent;

@OneToMany(cascade = CascadeType.PERSIST)
private List<SushiMapElement<K, V>> children = new ArrayList<SushiMapElement<K, V>>();

@Column(name = "MapKey")
K key;

@Column(name = "MapValue")
V value;

他のクラスはうまく機能しますが、正しいマッピングを取得できません。Column、JoinColumn、JoinTable などを使用して、数時間さまざまなマッピングを試しました。Eclipse Link はデータベースを作成せず、ValueHolderInterface を使用するように指示します。

The attribute [tree] is not declared as type ValueHolderInterface, but its mapping uses indirection.

ご協力いただきありがとうございます!

4

1 に答える 1

0

次の注釈で問題を解決しました。

   @ManyToOne(cascade=CascadeType.PERSIST)
   @JoinColumn(name="TreeID")

しかし、なぜこのように機能するのかわかりません。

于 2013-01-26T21:36:26.180 に答える