with onetomany example ejemplo anotaciones annotation hibernate jpa hibernate-mapping hibernate-annotations

onetomany - mapping hibernate annotation example



org.hibernate.MappingException: no se pudo determinar el tipo para: java.util.Set, en la tabla: USUARIOS, para las columnas: (1)

Tengo un problema que Hibernate no puede determinar el tipo de Set en la tabla USERS. Estoy tratando de crear una clave externa de la tabla INVOICES a través de la relación de uno a muchos. Un usuario puede generar muchas facturas. Mi User.java se da a continuación.

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

Intento usar INVOICE-ID como clave externa en la tabla USERS. Estoy siguiendo las instrucciones dadas aquí Hibernate: Anotación uno a muchos (clave externa)

@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 se da a continuación.

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


Si mal no recuerdo, Hibernate no te permite mezclar y combinar anotaciones junto con field / getter. Si su anotación @Id se establece en un campo, todas sus asignaciones deben seguir los campos. Intente mover @OneToMany @JoinColumn(name="INVOICE_ID", nullable=false) de getInvoices() a private Set<Invoice> invoices; Este patrón también debe aplicarse a su clase de Invoice