Java Hibernate接口多态映射

Java Hibernate接口多态映射,java,hibernate,nhibernate-mapping,Java,Hibernate,Nhibernate Mapping,我最近在学习Hibernate,基本概念对我来说很清楚,但我现在有一个设计问题。我所有的具体类都实现了接口,下面是代码: 包装组件 import javax.persistence.Entity; public interface Person { public void setName(String name); public String getName(); public void setId(Integer id); public Integer get

我最近在学习Hibernate,基本概念对我来说很清楚,但我现在有一个设计问题。我所有的具体类都实现了接口,下面是代码: 包装组件

import javax.persistence.Entity;

public interface Person {
    public void setName(String name);
    public String getName();
    public void setId(Integer id);
    public Integer getId();
    public void setWeapon(Weapon weapon);
    public Weapon getWeapon();
}
import javax.persistence.*;

@Entity
@Table(name = "weapon_inf")
public class WeaponImpl implements Weapon {
    @Id@GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "weapon_id")
    private Integer id;
    @Column(name = "weapon_sharpness")
    private Integer sharpness;
    setters and getters omitted
}
````

````

```` 包装组件

import javax.persistence.Entity;

public interface Person {
    public void setName(String name);
    public String getName();
    public void setId(Integer id);
    public Integer getId();
    public void setWeapon(Weapon weapon);
    public Weapon getWeapon();
}
import javax.persistence.*;

@Entity
@Table(name = "weapon_inf")
public class WeaponImpl implements Weapon {
    @Id@GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "weapon_id")
    private Integer id;
    @Column(name = "weapon_sharpness")
    private Integer sharpness;
    setters and getters omitted
}
当我尝试hibernate程序(保存一个人的实例)时,它抛出

org.hibernate.AnnotationException: @OneToOne or @ManyToOne on com.PersonImpl.weapon references an unknown entity: com.Weapon

有解决此问题的解决方案或注释吗?

您应该引用
WeaponImpl
而不是
WeaponImpl
,因为您的实体类是
WeaponImpl

这给了你机会

@OneToOne
@JoinColumn(name = "weapon_id",referencedColumnName = "weapon_id")
private WeaponImpl weapon;

尝试使用
WeaponImpl
而不是像这样使用
WeaponImpl

  @OneToOne(targetEntity = WeaponImpl.class)