通用双向一对多关系

时间:2013-06-06 09:00:41

标签: java hibernate jpa eclipselink

我想知道在JPA 2.0中是否存在使用泛型的方法?

考虑这种情况:

@Entity
public class GenericPhoto<T> implements Serializable {

  @Id
  @GeneratedValue
  private long id;

  @NotNull
  private byte[] file;

  @ManyToOne(cascade = { CascadeType.DETACH })
  @JoinColumn(name = "PARENTID", nullable = false)
  @NotNull
  private T parent;

  //...
}

@Entity
public Car {

  @OneToMany(mappedBy = "parent")
  private Set<GenericPhoto<Car>> photos;

  //...
}

@Entity
public Truck {

  @OneToMany(mappedBy = "parent")
  private Set<GenericPhoto<Truck>> photos;

  //...
}

我希望代码解释一切。我只是想为照片制作一个通用类,我认为这样可以更容易地实现服务等。

祝你好运

1 个答案:

答案 0 :(得分:1)

当您使用泛型时,它类似于不键入字段(即Object父级),因此您需要告诉JPA如何映射关系。为此,您可以在JPA中使用targetEntity。

为了实现这一目标,你需要一个普通的超级轿车,即Car和Truck,即Auto,并将@ManyToOne中的targetEntity设置为Auto(你也可以考虑将照片移动到Auto)。

如果由于某种原因无法使用继承,(最好使用继承)。然后,如果您使用EclipseLink,则可以使用@VariableOneToOne关系。