2013-04-06 19 views
29

Tôi gặp sự cố Hibernate không thể xác định loại cho Đặt tại bảng NGƯỜI DÙNG. Tôi đang cố tạo một khóa ngoại của bảng INVOICES thông qua mối quan hệ một-nhiều. Một Người dùng có thể tạo nhiều Hóa đơn. User.java của tôi được đưa ra dưới đây.org.hibernate.MappingException: Không thể xác định loại cho: java.util.Set, tại bảng: USERS, cho cột: [org.hibernate.mapping.Column (invoice)]

@Entity 
@Table(name="USERS") 
public class User { 

    @Id 
    @Column(name="User_Id",nullable=false) 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private Integer user_id; 


    @Column(name="NAME") 
    private String name; 

    @Column(name="Address") 
    private String address; 

    @Column(name="Designation") 
    private String designation; 


    private Set<Invoice> invoices; 

    /*@OneToMany 
    @JoinColumn(name="Rec_Invoice_ID", nullable=false) 
    private Set<RecurringInvoice> recurring_invoices;*/ 

Tôi đang cố gắng sử dụng INVOICE-ID làm khóa ngoại trong bảng USERS. Tôi theo các hướng dẫn đưa ra ở đây Hibernate: Annotation one-to-many (foreign-key)

@OneToMany 
    @JoinColumn(name="INVOICE_ID", nullable=false) 
    public Set<Invoice> getInvoices() { 
     return invoices; 
    } 

    public void setInvoices(Set<Invoice> invoices) { 
     this.invoices = invoices; 
    } 

/* public Set<RecurringInvoice> getRecurring_invoices() { 
     return recurring_invoices; 
    } 

    public void setRecurring_invoices(Set<RecurringInvoice> recurring_invoices) { 
     this.recurring_invoices = recurring_invoices; 
    } 
*/ 
    // Getters and Setters 
    public Integer getUser_id() { 
     return user_id; 
    } 

    public void setUser_id(Integer user_id) { 
     this.user_id = user_id; 
    } 

    public String getName() { 
     return name; 
    } 

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

    public String getAddress() { 
     return address; 
    } 

    public void setAddress(String address) { 
     this.address = address; 
    } 

    public String getDesignation() { 
     return designation; 
    } 

    public void setDesignation(String designation) { 
     this.designation = designation; 
    } 

} 

My Invoice.java được đưa ra dưới đây.

@Entity 
@Table(name="INVOICES") 
public class Invoice { 


    private Integer invoice_id; 

    @Column(name="Date_Created", nullable=false) 
    private Timestamp dateCreated; 

    @Column(name="DESCRIPTION") 
    private String description; 

    @Column(name="Total_Amount") 
    private Double totalAmount; 

    @Column(name="Tax_Amount") 
    private Double taxAmount; 

    @Column(name="Due_Date") 
    private Timestamp dueDate; 

    @Column(name="deleted") 
    private boolean deleted; 


    private InvoiceItemsDetails invoiceItemsDetails; 


    private Client client; 

    @OneToOne 
    @JoinColumn(name="ID", nullable=false) 
    public Client getClient() { 
     return client; 
    } 

    public void setClient(Client client) { 
     this.client = client; 
    } 

    public Date getDueDate() { 
     return dueDate; 
    } 

    public void setDueDate(Timestamp dueDate) { 
     this.dueDate = dueDate; 
    } 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    @Column(name="INVOICE_ID", nullable=false, insertable=false,updatable=false) 
    public Integer getInvoice_id() { 
     return invoice_id; 
    } 

    public void setInvoice_id(Integer invoice_id) { 
     this.invoice_id = invoice_id; 
    } 

    public Date getDateCreated() { 
     return dateCreated; 
    } 

    public void setDateCreated(Timestamp dateCreated) { 
     this.dateCreated = dateCreated; 
    } 

    public String getDescription() { 
     return description; 
    } 

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

    public Double getTotalAmount() { 
     return totalAmount; 
    } 

    public void setTotalAmount(Double totalAmount) { 
     this.totalAmount = totalAmount; 
    } 

    public Double getTaxAmount() { 
     return taxAmount; 
    } 

    public void setTaxAmount(Double taxAmount) { 
     this.taxAmount = taxAmount; 
    } 

    public boolean isDeleted() { 
     return deleted; 
    } 

    public void setDeleted(boolean deleted) { 
     this.deleted = deleted; 
    } 

    @OneToOne 
    @JoinColumn(name="Invoice_Item_Detail_id", nullable=false) 
    public InvoiceItemsDetails getInvoiceItemsDetails() { 
     return invoiceItemsDetails; 
    } 

    public void setInvoiceItemsDetails(InvoiceItemsDetails invoiceItemsDetails) { 
     this.invoiceItemsDetails = invoiceItemsDetails; 
    } 


} 

Trả lời

100

Nếu tôi nhớ chính xác, Hibernate không cho phép bạn trộn và khớp chú thích kết hợp với trường/getter. Nếu chú thích @Id của bạn được đặt trên một trường, tất cả các ánh xạ của bạn phải theo các trường. Hãy thử di chuyển @OneToMany @JoinColumn(name="INVOICE_ID", nullable=false)getInvoices()-private Set<Invoice> invoices; mô hình này nên được áp dụng cho lớp Invoice của bạn cũng

+0

Xin chào orid, tôi đã làm những gì bạn nói nhưng bây giờ tôi nhận được một org.hibernate.MappingException ngoại lệ mới: Cột Lặp đi lặp lại trong bản đồ cho tổ chức : net.impetus.dto.Invoice cột: INVOICE_ID (nên được ánh xạ với insert = "false" update = "false") – user2251798

+0

Đó là vì trường 'invoice_id' cũng được ánh xạ với cùng một tên cột:' @Column (name = "INVOICE_ID "...' Thay đổi tên cột FK thành một cái gì đó như '@OneToMany @JoinColumn (tên =" USER_ID ", nullable = false) riêng Đặt hóa đơn; ' –

+0

Cảm ơn bạn rất nhiều Orid – user2251798

Các vấn đề liên quan