1

根据@OneToMany 上的JavaDoc,如果“集合属性是使用Java 泛型定义的” ,则不需要指定targetEntity 。最重要的是,您不需要在构造时实例化集合属性,但可以将其保留为空。例如:

@OneToMany(mappedBy="student")
private Collection<Qualification> qualification;

但是,据我了解泛型和类型擦除,在运行时所有可能看到的是这是一个集合,而不是一个限定集合 - 因为据我了解,泛型类型已经在这里被擦除了。

这是如何运作的?我错过了什么?

4

2 回答 2

2

感谢 Thomas W 指出这一点。您可以使用反射,使用Method.getGenericReturnType()和Field.getGenericType( )从类的方法和字段中获取通用类型信息,然后提供足够的信息来了解此处需要做什么。

于 2013-10-04T10:13:02.490 回答
0

您缺少此注释的对等部分:

随着mappedBy="student"您定义了可能的类,因为您正在“链接”到另一个数据库表。而且那个表也有一个Java-Binding。因此 JPA 将尝试从 N 表创建一个对象并将它们添加到列表中。

更新

@DiscriminatorColumn在 JPA 中,如果您为所有继承的类设置一个表,则有一个叫做 的东西。您还可以为每个 conreete 类指定一个表。

http://en.wikibooks.org/wiki/Java_Persistence/Inheritance

于 2013-10-04T09:29:25.283 回答