Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA-加载抽象属性的不同实现_Java_Jpa_Abstract - Fatal编程技术网

Java JPA-加载抽象属性的不同实现

Java JPA-加载抽象属性的不同实现,java,jpa,abstract,Java,Jpa,Abstract,我的JavaEE项目运行在WildFly 8上,使用的是JPA2.1。 有一个实体Person、一个抽象实体AbstractMatch和两个实体,它们实现了AbstractMatch:足球比赛和曲棍球比赛 public class Person implements Serializable { private static final long serialVersionUID = 1L; @Id @Email @NotNull private String email;

我的JavaEE项目运行在WildFly 8上,使用的是JPA2.1。 有一个实体Person、一个抽象实体AbstractMatch和两个实体,它们实现了AbstractMatch:足球比赛和曲棍球比赛

public class Person implements Serializable {
  private static final long serialVersionUID = 1L;
  @Id
  @Email
  @NotNull
  private String email;

  @ManyToMany(targetEntity=FootballMatch.class)
  private List<AbstractMatch> matches
}

@MappedSuperclass
public abstract class AbstractMatch implements Serializable {
  private static final long serialVersionUID = 1L;
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  protected Long id;
}

@Entity
public class FootballMatch extends AbstractMatchEntity {
}
public类Person实现可序列化{
私有静态最终长serialVersionUID=1L;
@身份证
@电子邮件
@NotNull
私人字符串电子邮件;
@ManyToMany(targetEntity=FootballMatch.class)
私有列表匹配
}
@映射超类
公共抽象类AbstractMatch实现了可序列化{
私有静态最终长serialVersionUID=1L;
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
保护长id;
}
@实体
公共类FootballMatch扩展了AbstractMatchEntity{
}

人与人之间有很多关系。ManyToMany注释的targetEntity属性定义要加载的类类型。因此,如果我从数据库中加载一个人,所有匹配项都将被强制转换为该类类型(在本例中为FootballMatch)。如何加载对象在持久化时拥有的原始类类型?

通过在
IMatch
集合中使用泛型,可以避免使用
targetEntity
。另外:
IMatch
听起来像一个接口,但它不应该是一个在JPA中支持继承的抽象类吗?我说的是一个抽象类,使用@MappedSuperclass注释。我更新了问题以便更好地解释。我的问题不是定义数据库表,而是加载阶段。我想从数据库中加载一个人,所有abstractMatch对象(属性匹配)都应该具有持久化时的类类型。你不必担心。只需建模您的
@manytomy
关系,而不需要
targetEntity
。泛型类型信息
AbstractMatch
就足够了。对于引用完整性,我建议不要将
TABLE\u PER\u CLASS
作为继承策略与
@manytomy
关系结合使用,因为这使得只有一个外键的n:m表不可能与
AbstractMatch
实体匹配。我认为“targetEntity”是必要的,因为如果我没有指定它,就会引发异常。在你回答之后,我又试了一次,结果成功了。所以谢谢:)