根据@OneToMany上的JavaDoc,如果“使用Java泛型定义了集合属性”,则无需指定 targetEntity 。除此之外,您不需要在构造时实例化集合属性,但可以将其保留为null。例如:
@OneToMany(mappedBy="student")
private Collection<Qualification> qualification;
然而,正如我理解泛型和类型擦除,在运行时所有可能看到的是这是一个集合而不是资格集合 - 因为据我所知,泛型类型已经在这里被删除。
这是如何工作的?我错过了什么?
答案 0 :(得分:2)
感谢Thomas W指出这一点。您可以使用 Method.getGenericReturnType()和 Field.getGenericType()从类中的方法和字段获取Generic类型信息,然后将提供足够的信息知道这里需要做什么。
答案 1 :(得分:0)
你错过了这个注释的另一部分:
使用mappedBy="student"
定义了可能的类,因为您正在“链接”到另一个数据库表。那个表也有一个Java-Binding。因此JPA将尝试从N表创建一个Object并将它们添加到列表中。
<强>更新强>
在JPA中,如果为所有继承的类设置表,则会出现名为@DiscriminatorColumn
的内容。您还可以为每个conreete类指定一个表。