2016-04-10 4 views
-1

В последнее время я изучаю Hibernate, основные понятия понятны для меня, но теперь у меня проблема с дизайном. Все мои конкретные классы реализуют интерфейсы, вот код: package com;Отображение полиморфизма интерфейса гибернации

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 
} 

`` `` ` пакет ком;

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 
} 

Когда я пытаюсь программа спящего режима (сохранить экземпляр человека), он бросает

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

Есть ли решение или аннотации, чтобы решить эту проблему?

ответ

1

Вы должны указать WeaponImpl вместо Weapon как ваш класс сущности WeaponImpl.

Это дает полю

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

Спасибо. он исправлен – user2716189

1

Попробуйте использовать WeaponImpl вместо Weapon так:

@OneToOne(targetEntity = WeaponImpl.class) 
+0

Спасибо, это исправлено. – user2716189