2016-04-10 18 views
-1

Ich lerne Hibernate vor kurzem, die grundlegenden Konzepte sind klar für mich, aber ich habe jetzt ein Design-Problem. Alle meine konkreten Klassen implementieren Schnittstellen, hier ist der Code: Paket com;Hibernate Interface Polymorphie Mapping

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(); 
} 

`` ``

package com; 

import javax.persistence.Entity; 

public interface Weapon { 
    public void setSharpness(Integer sharpness); 
    public Integer getSharpness(); 
    public void setId(Integer id); 
    public Integer getId(); 
} 

`` ``

package com; 

import javax.persistence.*; 

@Entity 
@Table(name = "person_inf") 
public class PersonImpl implements Person{ 
    @[email protected](strategy = GenerationType.IDENTITY) 
    @Column(name = "person_id") 
    private Integer id; 
    @Column(name = "person_name") 
    private String name; 

    @OneToOne(targetEntity = Weapon.class) 
    @JoinColumn(name = "weapon_id",referencedColumnName = "weapon_id") 
    private Weapon weapon; 
setters and getters omitted 
} 

`` `` Paket com;

import javax.persistence.*; 

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

Wenn ich versuche, das Hibernate-Programm (eine Person, die Instanz speichern), es wirft

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

Gibt es eine Lösung oder eine Anmerkung, dieses Problem zu lösen?

Antwort

1

Sie sollten auf WeaponImpl statt Weapon verweisen, da Ihre Entitätsklasse WeaponImpl ist.

Dass Sie Feld

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

Danke. es ist behoben – user2716189

1

Versuchen zu verwenden WeaponImpl statt Weapon wie folgt ergibt:

@OneToOne(targetEntity = WeaponImpl.class) 
+0

Danke, es ist behoben. – user2716189