2011-02-10 24 views
76

Tôi đang tìm chân của mình bằng Chú thích Hibernate và tôi đã gặp sự cố mà tôi hy vọng một số người có thể trợ giúp.Sự cố Hibernate - "Sử dụng @OneToMany hoặc @ManyToMany nhắm mục tiêu một lớp chưa được ánh xạ"

Tôi có 2 thực thể, Mục và Phạm viTopic. Phần có một thành viên lớp Danh sách, vì vậy mối quan hệ Một đến Nhiều. Khi tôi chạy thử nghiệm đơn vị của tôi Tôi nhận được ngoại lệ này:

Sử dụng @OneToMany hoặc @ManyToMany nhắm mục tiêu một lớp unmapped: com.xxx.domain.Section.scopeTopic [com.xxx.domain.ScopeTopic]

Tôi giả định rằng lỗi ngụ ý rằng đối tượng ScopeTopic của tôi không được ánh xạ tới một bảng? Tôi không thể nhìn thấy với tôi đã làm sai. Dưới đây là các lớp Entity:


@Entity 
public class Section { 
    private Long id; 
    private List<ScopeTopic> scopeTopics; 

    public Section() {} 

    @Id 
    public Long getId() { 
     return id; 
    } 

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

    @OneToMany 
    @JoinTable(name = "section_scope", joinColumns = {@JoinColumn(name="section_id")}, 
       inverseJoinColumns = {@JoinColumn(name="scope_topic_id")}) 
    public List<ScopeTopic> getScopeTopic() { 
     return scopeTopic; 
    } 

    public void setScopeTopic(List<ScopeTopic> scopeTopic) { 
     this.scopeTopic = scopeTopic; 
    } 
} 

@Entity 
@Table(name = "scope_topic") 
public class ScopeTopic { 
    private Long id; 
    private String topic; 

    public ScopeTopic() {} 

    @Id 
    public Long getId() { 
     return id; 
    } 

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

    public String getTopic() { 
     return topic; 
    } 

    public void setTopic(String topic) { 
     this.topic = topic; 
    } 
} 

Tôi chắc chắn rằng nó thiếu riêng của tôi về sự hiểu biết đó là có lỗi vì vậy một số hướng dẫn sẽ là tuyệt vời, cảm ơn!

Trả lời

178

Chú thích của bạn trông ổn. Dưới đây là những điều cần kiểm tra:

  • chắc chắn rằng các chú thích là javax.persistence.Entity, và không org.hibernate.annotations.Entity. Cái trước làm cho thực thể có thể phát hiện được. Sau này chỉ là một bổ sung.

  • nếu bạn đang bằng tay danh sách các đơn vị của bạn (trong persistence.xml, trong hibernate.cfg.xml, hoặc khi cấu hình máy phiên của bạn), thì chắc chắn rằng bạn cũng đã liệt kê các thực thể ScopeTopic

  • đảm bảo bạn không có nhiều lớp ScopeTopic trong các gói khác nhau và bạn đã nhập sai.

+13

Ah, cảm ơn! Điểm 2 là chìa khóa, tôi đã quên đặt ScopeTopic vào danh sách thuộc tính annotatedClasses của mình khi tạo lỗi SessionFactory, n00b! – C0deAttack

+4

Điểm 1 là chìa khóa cho tôi: D cảm ơn –

+3

Đối với những người chỉ cần nhấn nhận xét này. org.hibernate.annotations.Entity không được chấp nhận trong Hibernate 4. Điểm 1 không áp dụng nữa. – gspatel

17

Thực thể của bạn có thể không được liệt kê trong tệp cấu hình ngủ đông.

10

Mine đã không có @Entity trên thực thể bên nhiều

@Entity // this was commented 
@Table(name = "some_table") 
public class ChildEntity { 
    @JoinColumn(name = "parent", referencedColumnName = "id") 
    @ManyToOne 
    private ParentEntity parentEntity; 
} 
4

Chủ yếu là trong Hibernate, cần phải thêm lớp Entity trong hibernate.cfg.xml như-

</hibernate-configuration> 
    </session-factory> 

    .... 
    <mapping class="xxx.xxx.yourEntityName"/> 
</session-factory> 
</hibernate-configuration> 
Các vấn đề liên quan