我有一个问题,就是Hibernate无法在表USERS上确定Set的类型。我试图通过一对多关系创建表INVOICES的外键。一位用户可以生成许多发票。我的User.java如下。
@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;*/
我正在尝试使用INVOICE-ID作为USERS表中的外键。我正在按照此处给出的说明进行 hibernate:一对多注释(外键)
@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; } }
如果我没记错的话,Hibernate不允许您将注释与field / getter混合使用。如果@Id在字段上设置了注释,则所有映射都应遵循字段。尝试@OneToMany @JoinColumn(name="INVOICE_ID", nullable=false)从getInvoices()切换到。private Set<Invoice> invoices;此模式也应应用于您的Invoice班级
@Id
@OneToMany @JoinColumn(name="INVOICE_ID", nullable=false)
getInvoices()
private Set<Invoice> invoices;
Invoice