nicht akzeptieren können, die einen NULL-Wert auf der @ID @generatedvalue JPA-entity

Ich versuche, eine auf die Wunschliste-Funktion für meine app, aber ich bekomme immer diese Fehlermeldung:

Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461):           org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLIntegrityConstraintViolationException: Column 'WISH_ID'        cannot accept a NULL value.
Error Code: -1
Call: INSERT INTO WISHLIST (BOOK_TITLE, CUSTOMER_ID) VALUES (?, ?)
bind => [2 parameters bound]
Query: InsertObjectQuery(dukesbookstore.entity.Wishlist[ wishId=null ])

ENTITY-Klasse:

@Entity
@Table(name = "WISHLIST")
@XmlRootElement
@NamedQueries(
{
@NamedQuery(name = "Wishlist.findByCustomerId", query = "SELECT w FROM Wishlist w WHERE  w.customerId = :customerId"),

})
public class Wishlist implements Serializable
{
private static final long serialVersionUID = 1L;
@Id @GeneratedValue(strategy=GenerationType.IDENTITY) 
@Column(name = "WISH_ID")
private Integer wishId;
@Column(name = "CUSTOMER_ID")
private Integer customerId;
@Size(max = 35)
@Column(name = "BOOK_TITLE")
private String bookTitle;

public Wishlist()
{
}



public Integer getCustomerId()
{
    return customerId;
}

public void setCustomerId(Integer customerId)
{
    this.customerId = customerId;
}

public String getBookTitle()
{
    return bookTitle;
}

public void setBookTitle(String bookTitle)
{
    this.bookTitle = bookTitle;
}   
}

- und dies ist der code für das erstellen eines neuen Wunsch:

public void createWishlist(String title,int cust_id)
{
            Wishlist newWish = new Wishlist();
            newWish.setBookTitle(title);
            newWish.setCustomerId(cust_id);
            em.persist(newWish);
  }

Habe ich versucht, den Blick auf andere, ähnliche Probleme, aber Sie beinhaltet hibernate, die ich nicht verwende. Ich habe auch versucht verschiedene generation der Strategie wie AUTO,SEQUENCE,TABLE aber alle gescheitert. Ich habe auch eine andere Entität mit dem Namen Kunden das ist genau das gleiche, aber es funktioniert gut, obwohl seine erstellt aus einem Formular.

Wechsel zu AUTO dieser Fehler wird generiert:

Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461):   org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: Table/View 'SEQUENCE' does not exist.
Error Code: -1
Call: UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ?
bind => [2 parameters bound]
Query: DataModifyQuery(name="SEQUENCE" sql="UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ?")
root cause

java.sql.SQLSyntaxErrorException: Table/View 'SEQUENCE' does not exist.
root cause

org.apache.derby.client.am.SqlException: Table/View 'SEQUENCE' does not exist.

Persistence.xml incase relevanten

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence    http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="myStorePU" transaction-type="JTA">
    <jta-data-source>mydb</jta-data-source>
    <class>myStore.entity.Book</class>
    <class>myStore.entity.Customer</class>
    <class>myStore.entity.Wishlist</class>

    <properties>
        <property name="javax.persistence.jdbc.user" value="APP"/>
        <property name="javax.persistence.jdbc.password" value="APP"/>

         <property name="eclipselink.logging.level" value="FINE"/>
    </properties>

</persistence-unit>

  • Was ist die zugrunde liegende Datenbank, die Sie verwenden? Bezüglich der ID-Generierung unterscheiden sich diese, z.B. Oracle nicht unterstützt GenerationType.IDENTITÄT. Ich weiß, Sie sagte, dass Sie versucht, die andere, aber immer noch das kann wichtig sein, um es richtig zu verwenden.
  • im mit-Derby.
  • Vielleicht dieser Beitrag hilft Ihnen?
  • in diesem Beitrag, er löste es durch das löschen einer alten jar-immer bereitgestellt mit der entity-Klassen aus, bevor eine änderung zur Nutzung der identity-generation, aber wie kann ich feststellen, dass die alte jar? so kann ich löschen Sie es auch.
  • Hängt davon ab, was Sie verwenden für Ihre Anwendung aus. In der Regel, Ihre Applikations-server ist ein deploy-Ordner, wo Ihre Anwendung bekommt, so zum Beispiel in JBoss seine standardmäßig in jboss/server/default/deploy.
  • Ich bin mit ant, glassfish und netbeans für diese.
  • "Run > Clean and Build Project" sollte in der Regel den trick tun. Wenn es nicht hilft, probieren Sie die Vorschläge in diesem post
  • Ansonsten sehe ich nicht wirklich einen Fehler in deinem code. Ich würde vorschlagen, nehmen Sie den AUTO-Modus um zu lassen, eclipse-link, wählen Sie das richtige für Ihre Datenbank.
  • ändern auf AUTO erzeugt die oben genannten Fehler:

InformationsquelleAutor foreverNewb | 2013-10-29
Schreibe einen Kommentar