2017-02-25 5 views
0

Bitte können Sie mir helfen? In JPA versuche ich eine OneToMany bidirektionale Beziehung zu erstellen, aber ich habe die folgenden Fehler: "[EclipseLink-63]: Die Instanzerstellungsmethode [entity.OrderLine.], Ohne Parameter, ist nicht vorhanden oder nicht zugänglich [EclipseLink-28019]: Die Bereitstellung von PersistenceUnit [simple-jpaPU] ist fehlgeschlagen. Schließen Sie alle Fabriken für diese PersistenceUnit. "JPA OneToMany bidirektionale Beziehung [EclipseLink-63] Fehler

Es sind meine Einheiten: OneToMany Entity:

package entity; 
import java.util.*; 
import java.io.Serializable; 
import javax.persistence.*; 
import org.eclipse.persistence.annotations.TimeOfDay; 

@Entity 
public class Order implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
    @Temporal(TemporalType.TIMESTAMP) 
    private Date creationDate;  
    @OneToMany(mappedBy = "o") 
    private List<OrderLine> orderLines; 

    public Date getCreationDate() { 
     return creationDate; 
    } 

    public void setCreationDate(Date creationDate) { 
     this.creationDate = creationDate; 
    } 

    public List<OrderLine> getOrderLines() { 
     return orderLines; 
    } 

    public void setOrderLines(ArrayList<OrderLine> orderLines) { 
     this.orderLines = orderLines; 
    } 

    public Order(Date creationDate) { 
     this.creationDate = creationDate; 
    } 

    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    @Override 
    public int hashCode() { 
     int hash = 0; 
     hash += (id != null ? id.hashCode() : 0); 
     return hash; 
    } 

    @Override 
    public String toString() { 
    return "entity.Order[ id=" + id + " ]"; 
    } 
} 

ManyToOne Entity:

package entity; 

import java.io.Serializable; 
import javax.persistence.*; 

@Entity 
@Table(name="orderline_table") 
public class OrderLine implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
    private String item; 
    private Double unitPrice; 
    private Integer quantity; 
    @ManyToOne 
    Order o; 

    public String getItem() { 
     return item; 
    } 

    public void setItem(String item) { 
     this.item = item; 
    } 

    public Double getUnitPrice() { 
     return unitPrice; 
    } 

    public void setUnitPrice(Double unitPrice) { 
     this.unitPrice = unitPrice; 
    } 

    public Integer getQuantity() { 
     return quantity; 
    } 

    public void setQuantity(Integer quantity) { 
     this.quantity = quantity; 
    } 

    public OrderLine(String item, Double unitPrice, Integer quantity) { 
     this.item = item; 
     this.unitPrice = unitPrice; 
     this.quantity = quantity; 
    } 

    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    @Override 
    public int hashCode() { 
     int hash = 0; 
     hash += (id != null ? id.hashCode() : 0); 
     return hash; 
    } 


    @Override 
    public String toString() { 
     return "entity.OrderLine[ id=" + id + " ]"; 
    }  
} 

Antwort

0

Es schlägt fehl, weil OrderLine kein argument Konstruktor hat. Es ist erforderlich wie in der JPA 2.1-Spezifikation (Kapitel 2.1) angegeben:

Die Entitätsklasse muss einen Konstruktor ohne Argumente haben. Die Entitätsklasse kann auch andere Konstruktoren haben. Der Konstruktor no-arg muss öffentlich oder geschützt sein.

Der Standardkonstruktor wird nicht generiert, da ein anderer Konstruktor angegeben wird. Problem kann durch Zugabe von folgenden Konstruktor festgelegt werden:

public OrderLine() { 
} 
+0

Whan ich hinzufügen, die nicht argument Konstrukteure in den beiden Entitäten Ich habe diese Fehler: –

+0

Wenn ich den nicht argument Konstrukteure in den beiden Entitäten hinzufügen, ich habe diesen Fehler: "[EclipseLink-4002]: org.eclipse.persistence.exceptions.DatabaseException Interner Ausnahmefehler: org.postgresql.util.PSQLException: ERREUR: Error of Syntaxe ou près de« BESTELLUNG »Position: 13 Fehlercode: 0 Aufruf: INSERT IN ORDER (ID, CREATIONDATE) WERTE (?,?) Bind => [2 Parameter gebunden] Abfrage: InsertObjectQuery (entity.Order [id = 151]) bei org.eclipse.persistence.internal.jpa.transaction.EntityTransactionImpl. commit (EntityTransactionImpl.java:157) " –

+0

Ihr zweites Problem hat keine Sache mit dem Konstruktor no-arg zu tun. Mein Französisch ist ein wenig eingerostet, aber Problem ist, dass ORDER reserviertes Wort in SQL ist. Eine Möglichkeit zur Lösung des Problems besteht darin, reservierte Wörter als Tabellennamen zu vermeiden. Wenn das nicht möglich ist, finden Sie hier zwei weitere Möglichkeiten, ein solches Problem zu lösen: http://stackoverflow.com/questions/6791882/jpa-database-delimiters –

Verwandte Themen