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 + " ]";
}
}
Whan ich hinzufügen, die nicht argument Konstrukteure in den beiden Entitäten Ich habe diese Fehler: –
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) " –
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 –