如何使用JPA映射实体?

时间:2013-01-26 21:24:21

标签: jpa-2.0 eclipselink

我无法在此类中获得字段树的正确映射:

@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.

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我用以下注释解决了问题:

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

但我不知道,为什么会这样。