2013-04-06 28 views
29

我有一个问题,即Hibernate是无法确定表USERS处的Set的类型。 我正尝试通过一对多关系创建表INVOICES的外键。一个用户可以生成很多发票。 我的User.java如下。org.hibernate.MappingException:无法确定类型:java.util.Set中,在表:用户,用于列:[org.hibernate.mapping.Column(发票)]

@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;*/ 

我想在USERS表中使用INVOICE-ID作为外键。 我下面这里给出 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; 
    } 

} 

我Invoice.java在下面给出的说明。

@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; 
    } 


} 

回答

100

如果我没有记错的话,Hibernate不会让你在field/getter中混合搭配注释。如果您的@Id批注设置在字段上,则所有映射都应该在字段后面。尝试从getInvoices()移动@OneToMany @JoinColumn(name="INVOICE_ID", nullable=false)private Set<Invoice> invoices;这种模式应该适用于您的Invoice类以及

+0

你好ORID,我已经做了,你说什么,但现在我得到一个新的异常org.hibernate.MappingException:重复列在实体映射:net.impetus.dto.Invoice列:INVOICE_ID(应该用insert =“false”update =“false”映射) – user2251798 2013-04-06 10:16:53

+0

这是因为'invoice_id'字段也映射为相同的列名:'@Column(name =“INVOICE_ID “...”将FK列名更改为诸如“@OneToMany @JoinColumn(name =”USER_ID“,nullable = false)私人设置发票;' – 2013-04-06 15:10:44

+0

非常感谢Orid – user2251798 2013-04-08 11:14:23

相关问题