2012-02-27 3 views
0

오류 : org.hibernate.AnnotationException : 가에 의한 알 수없는 mappedBy : com.xxx.data.dao.classes.Categories.categoriesLang, 참조 된 부동산 알 수없는 : com.xxx .data.dao.classes.superclasses.CategoriesLang.categories@MappedSuperclass : 알 수없는 mappedBy

내 설정 :

최대 절전 모드 3.5.6

public interface CategoriesLangInt { 

    int id_categories = 0; 
    Categories categories = null; 
    String name = ""; 
    String description = ""; 

    int getId_categories(); 

    void setId_categories(int id_categories); 

    Categories getCategories(); 

    void setCategories(Categories categories); 

    String getName(); 

    void setName(String name); 

    String getDescription(); 

    void setDescription(String description); 
} 

@MappedSuperclass 
public abstract class CategoriesLang implements CategoriesLangInt { 

    @Id 
    @Column(name = "id_categories") 
    private int id_categories = 0; 
    @OneToOne 
    @JoinColumn(name = "id_categories") 
    private Categories categories; 
    @Size(max = 50) 
    private String name = ""; 
    @Size(max = 350) 
    private String description = ""; 

    @Override 
    public int getId_categories() { 
     return id_categories; 
    } 

    @Override 
    public void setId_categories(int id_categories) { 
     this.id_categories = id_categories; 
    } 

    @Override 
    public Categories getCategories() { 
     return categories; 
    } 

    @Override 
    public void setCategories(Categories categories) { 
     this.categories = categories; 
    } 

    @Override 
    public String getName() { 
     return name; 
    } 

    @Override 
    public void setName(String name) { 
     this.name = name; 
    } 

    @Override 
    public String getDescription() { 
     return description; 
    } 

    @Override 
    public void setDescription(String description) { 
     this.description = description; 
    } 

} 

@Entity 
@Table(name="categories") 
public class Categories implements Serializable { 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private Integer id_categories; 
    private boolean active; 
    @OneToOne(mappedBy="categories") 
    private CategoriesLangInt categoriesLangInt; 

    public Integer getId_categories() { 
     return id_categories; 
    } 

    public void setId_categories(Integer id_categories) { 
     this.id_categories = id_categories; 
    } 

    public boolean isActive() { 
     return active; 
    } 

    public void setActive(boolean active) { 
     this.active = active; 
    } 

    public CategoriesLangInt getCategoriesLangInt() { 
     return categoriesLangInt; 
    } 

    public void setCategoriesLangInt(CategoriesLangInt categoriesLangInt) { 
     this.categoriesLangInt = categoriesLangInt; 
    } 

} 

UPDATE는 그것을 해결!

오랜 시간에 걸쳐 연구를 해본 결과 나는 성공한다. 잘 작동합니다!

EER

@Entity 
@Table(name="categories") 
public class Category implements Serializable { 

    private Integer id; 
    private boolean active; 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    public Integer getId() { 
     return id; 
    } 

    public void setId(Integer id) { 
     this.id = id; 
    } 

    public boolean isActive() { 
     return active; 
    } 

    public void setActive(boolean active) { 
     this.active = active; 
    } 

} 

public interface CategoryInt{ 

    int getCategory_id(); 

    void setCategory_id(int category_id); 

    String getName(); 

    void setName(String name); 

    String getDescription(); 

    void setDescription(String description); 

    void setCategory(Category category); 

    Category getCategory(); 
} 

@MappedSuperclass 
public abstract class CategoryLang implements CategoryInt{ 

    private int category_id; 
    private String name; 
    private String description; 
    private Category category; 

    @Override 
    @Id 
    public int getCategory_id() { 
     return category_id; 
    } 

    @Override 
    public void setCategory_id(int category_id) { 
     this.category_id = category_id; 
    } 

    @Override 
    @Size(max = 50) 
    public String getName() { 
     return name; 
    } 

    @Override 
    public void setName(String name) { 
     this.name = name; 
    } 

    @Override 
    @Size(max = 350) 
    public String getDescription() { 
     return description; 
    } 

    @Override 
    public void setDescription(String description) { 
     this.description = description; 
    } 

    @Override 
    @OneToOne(cascade = CascadeType.ALL) 
    @PrimaryKeyJoinColumn 
    public Category getCategory() { 
     return category; 
    } 

    @Override 
    public void setCategory(Category category) { 
     this.category = category; 
    } 
} 

@Entity 
@Table(name = "en_categories") 
public class CategoryEN extends CategoryLang implements Serializable {} 

,

답변

1

먼저, 인터페이스는 필드 만 방법을 정의 할 수있다. 인터페이스에서 선언 한 필드는 실제로 public static final constants입니다.

은 후, 카테고리 엔티티는 CategoriesLangInt 필드를 가지고 있지만, Hibernate는이 인터페이스를 구현하는 여러 단체가있을 수 있기 때문에,이 필드가 나타내는 엔티티 알 수있는 방법이 없습니다. OneToOne 어노테이션의 targetEntity 속성을 사용하여 참조되는 엔티티를 Hibernate에 알려야한다.

마지막 CategoriesLang에서 id_categories 열 두번 매핑된다 : 일단 같은 ID 및 회 JoinColumn있다. 당신은 id_categories 필드를 제거하고 @Id로 categories 필드에 주석을, 또는 그대로 id_categories 필드를 떠나 categories에 @MapsId 주석을 추가해야 하나.

사이드 참고 : 이름 지정 규칙 자바 (필드와 메소드에 아무 밑줄)을 존중하고, 분류 카테고리의 이름을 변경해야한다 등 CategoryLang에 CategoriesLang는

+0

은 대단히 Nizet 감사드립니다. – Dani

0

나는 당신의 슈퍼 클래스에 필드 (여기 인터페이스 등) 확장 클래스에서 비슷한 이름의 필드에 의해 그림자가되어 있기 때문에 생각합니다. 카테고리와 같은 인터페이스에서 해당 필드를 제거해보십시오. 모든

관련 문제