2013-04-06 6 views
29

Ho un problema che Hibernate non è in grado di determinare il tipo di Set alla tabella UTENTI. Sto provando a creare una chiave esterna di tabelle INVOICES attraverso una relazione uno-a-molti. Un utente può generare molte fatture. Il mio User.java è indicato di seguito.org.hibernate.MappingException: Impossibile determinare il tipo per: java.util.Set, alla tabella: USERS, per le colonne: [org.hibernate.mapping.Column (fatture)]

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

Sto cercando di utilizzare INVOICE-ID come chiave esterna nella tabella USERS. Sto seguendo le istruzioni riportate qui 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; 
    } 

} 

mio Invoice.java è riportata qui sotto.

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


} 

risposta

100

Se non ricordo male, Hibernate non consente di mescolare e abbinare l'annotazione in combinazione con il campo/getter. Se l'annotazione @Id è impostata su un campo, tutti i mapping dovrebbero seguire i campi. Provare a spostare @OneToMany @JoinColumn(name="INVOICE_ID", nullable=false)getInvoices()-private Set<Invoice> invoices; Questo modello dovrebbe essere applicato alla classe Invoice così

+0

Ciao ORID, ho fatto quello che hai detto, ma ora sto ottenendo un nuovo org.hibernate.MappingException un'eccezione: Colonna ripetuta nella mappatura per l'entità : net.impetus.dto.Invoice column: INVOICE_ID (deve essere mappato con insert = "false" update = "false") – user2251798

+0

Questo perché il campo "invoice_id' è anche mappato con lo stesso nome di colonna:' @Column (name = "INVOICE_ID "...' Cambia il nome della colonna FK in qualcosa come '@OneToMany @JoinColumn (name =" USER_ID ", nullable = false) private Imposta fatture;' –

+0

Grazie mille Orid – user2251798

Problemi correlati