如何在JPA2?</entity,>中维护Map <entity,entity =“”>

时间:2011-01-09 22:53:13

标签: jpa map entity jpa-2.0 one-to-many

我有三个实体类( A B C )。 A 应包含将 B 的实例映射到 C 实例的地图。 C 的所有实例都归某些 A 的地图所有。我试过这个(省略了getters和setter):

@Entity public class A {
  @Id @GeneratedValue private Long id;

  // I want to map this in an elegant way:
  @OneToMany(mappedBy="a") @MapKey(name="b") private Map<B, C> map;
}

@Entity public class B {
  @Id @GeneratedValue private Long id;
}

@Entity public class C {
  @Id @GeneratedValue private Long id;

  // I don't really want the following in Java, unidirectional access from A to C would suffice:
  @ManyToOne private A a;
  @ManyToOne private B b;
  // Can I get rid of a and b?
}

这提供了一个很好的模式(恰好是我想要的模式!),但在Java中,由于现在有两种方式来指定关系,因此存在难看的重复:

a.map.put(b, c);

c.a = a;
c.b = b;

如果我只更改关联的一半,会发生什么?这看起来有问题。最好的方法是什么?对于所需的单向访问,是不是有更优雅的解决方案?

我考虑过使用 C @Embeddable并对 A.map 使用@ElementCollection,但实际上 C 是一个抽象基类不同的实体意味着它不能被制作成@Embeddable。

1 个答案:

答案 0 :(得分:0)

不确定您想要什么样的架构,但您可以使用@MapKeyJoinColumn使此关系单向,请参阅javadoc中的示例1.