JPA->fehler beim Insert in die Datenbank

bizkit

Mitglied
Hallo, ich habe seit kurzem mit JavaEE bzw JPA angefangen und kenne mich nicht so gut aus.
Deshalb richte ich mich wegen einem Fehler an Euch.

Folgendes Problem:
Ich habe zwe
i Tabellen in der Datenbank angelegt.
Tabelle1 -> TEST_CUSTOMER
-ID
PK, NOT NULL
-NAME NULL
-EMAIL NULL

Tabelle2 ->TEST_ITEM
-ID PK, NOT NULL
-NAME NULL
-SELLER_ID FK_SELLER2 (auf TEST_CUSTOMER_ID ), NULL
-BUYER_ID
FK2_BUYER2 (auf TEST_CUSOMER_ID), NULL



Die Tabelle 2 (TEST_ITEM) hat zwei Felder mit den FK`s (SELLER_ID, BUYER_ID) dieser Felder sind aber NULLABEL

Das Problem ist, dass wenn ich mit JPA ein Object Item (ohne FK`s auf Customer) erstelle und dieser per persist() in die Datenbank abspeichern will, kommt es zur der Fehlermeldung:

[EL Warning]: 2016-03-21 21:23:38.769--UnitOfWork(891232836)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLIntegrityConstraintViolationException: ORA-02291: integrity constraint (ONLINESHOP.FK_BUYER2) violated - parent key not found

Error Code: 2291
Call: INSERT INTO onlineshop.TEST_ITEM (ID, BUYER_ID, NAME, SELLER_ID) VALUES (?, ?, ?, ?)
bind => [4 parameters bound]
Query: InsertObjectQuery(Item@f4cfd90)
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLIntegrityConstraintViolationException: ORA-02291: integrity constraint (ONLINESHOP.FK_BUYER2) violated - parent key not found

Error Code: 2291
Call: INSERT INTO onlineshop.TEST_ITEM (ID, BUYER_ID, NAME, SELLER_ID) VALUES (?, ?, ?, ?)
bind => [4 parameters bound]
Query: InsertObjectQuery(Item@f4cfd90)


So wie ich die Fehlermeldung verstehe, werden die FK`s verlangt.
Was ich aber nicht verstehe, WARUM, diese zwei Felder sind doch NULLABLE.
Per Insert in der Datenbank selber, scheint es zu funktionieren ( insert into TEST_ITEM (ID,NAME)
values (1,'DVD'); ).

Kann mir jemand evtl. bei diesem Problem helfen.
Hier sind noch meine Java-Klassen bzw Code.

Customer.class
Code:
@Entity
@Table(schema="ONLINESHOP", name="TEST_CUSTOMER")
public class Customer  implements Serializable{

    @Id
    @SequenceGenerator(name="CUSTOMER_ID_GEN", 
                      sequenceName="seq_TEST_CUSTOMER",
                      allocationSize=1,
                      initialValue=1,
                      schema="ONLINESHOP")
    @GeneratedValue(strategy=GenerationType.SEQUENCE,
    generator="CUSTOMER_ID_GEN")
    private int id;
   
    private String name;
   
    private String email;
   
    private Set<Item> items;

//------------------------------------------------------------------------------------------------------------------------   
   

    public Customer() {
       
    }

    public Customer(String name, String email) {
        this.name = name;
        this.email = email;
    }

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Set<Item> getItems() {
        return items;
    }

    public void setItems(Set<Item> items) {
        this.items = items;
    }
   
   
   
   
}

Item.class
Code:
@Entity
@Table(schema="onlineshop", name="TEST_ITEM")
public class Item implements Serializable {
   
   
    @Id
    @SequenceGenerator(name="ITEM_ID_GEN",
                      sequenceName="seq_TEST_ITEM",
                      allocationSize=1,
                      initialValue= 1,
                      schema="ONLINESHOP")
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="ITEM_ID_GEN")
    private int id;
   
    private String name;
   
    @Column(name="SELLER_ID")
    private int verkaufer_id;
    @Column(name="BUYER_ID")
    private int kaufer_id;

       
    public Item() {
       
    }
   
   
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getVerkaufer_id() {
        return verkaufer_id;
    }
    public void setVerkaufer_id(int verkaufer_id) {
        this.verkaufer_id = verkaufer_id;
    }
    public int getKaufer_id() {
        return kaufer_id;
    }
    public void setKaufer_id(int kaufer_id) {
        this.kaufer_id = kaufer_id;
    }
       
}

Main.class
Code:
public class Tester {

    public static void main(String[] args) {
       
       
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("JPA_2");
        EntityManager manager = emf.createEntityManager();
               
        Item item1 = new Item();
        item1.setName("DVD");
       
        try
        {       
            manager.getTransaction().begin();               
           
            manager.persist(item1);
           
            manager.getTransaction().commit();           
        }
        catch(Exception ex)
        {
            System.out.println(ex.getMessage());
        }
       
       
    }

}
 

mrBrown

Super-Moderator
Mitarbeiter
deine FKs sind ints, die sind per Default 0, was nicht das NULL der Datenbank ist.
Du versucht mit Fk 0 zu adden, 0 gibt es aber nicht als key in der referenzierten Tabelle ;)

Edit:
Sinnvollerweise referenziert man die anderen Objekte nicht mehr als FK, sondern als Referenz auf das Objekt, in dem Fall dann mit @ManyToOne, Um FK und laden der Objekte kümmert sich dann das Framework
 

bizkit

Mitglied
Klar, hab ich garnicht bedacht dass Int 0 ist :)

Ich danke dir auf jeden Fall für dein Hilfe.

Jetzt habe ich das mit @ManyToOne umgesetzt
bekomme aber folgenden Fehler:

Exception [EclipseLink-48] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DescriptorException
Exception Description: Multiple writable mappings exist for the field [onlineshop.TEST_ITEM.SELLER_ID]. Only one may be defined as writable, all others must be specified read-only.
Mapping: org.eclipse.persistence.mappings.ManyToOneMapping[seller]
Descriptor: RelationalDescriptor(Item --> [DatabaseTable(onlineshop.TEST_ITEM)])


Kannst du mir evtl. da auch helfen? :)

Die beiden Klassen habe ich jetzt geändert.
Diese sehen wie folgt aus:

Customer:
Code:
@Entity
@Table(schema="ONLINESHOP", name="TEST_CUSTOMER")
public class Customer  implements Serializable{

    @Id
    @SequenceGenerator(name="CUSTOMER_ID_GEN", 
                      sequenceName="seq_TEST_CUSTOMER",
                      allocationSize=1,
                      initialValue=1,
                      schema="ONLINESHOP")
    @GeneratedValue(strategy=GenerationType.SEQUENCE,
    generator="CUSTOMER_ID_GEN")
    private int id;
   
    private String name;
   
    private String email;

  
    public Customer() {
       
    }

    public Customer(String name, String email) {
        this.name = name;
        this.email = email;
    }

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

Item:

Code:
@Entity
@Table(schema = "onlineshop", name = "TEST_ITEM")
public class Item implements Serializable {

    @Id
    @SequenceGenerator(name = "ITEM_ID_GEN", sequenceName = "seq_TEST_ITEM", allocationSize =        1, initialValue = 1, schema = "ONLINESHOP")
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ITEM_ID_GEN")
    private int id;

    private String name;

    @Column(name = "SELLER_ID")
    private int seller_id;
    @Column(name = "BUYER_ID")
    private int buyer_id;


    @ManyToOne
    //@JoinColumn(name="SELLER_ID")
    private Customer seller;

    public Item() {

    }

    public Customer getSeller() {
        return seller;
    }

    public void setSeller(Customer seller) {
        this.seller = seller;
    }

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getSellerID() {
        return seller_id;
    }

    public void setSellerID(int seller_id) {
        this.seller_id = seller_id;
    }

    public int getBuyerID() {
        return buyer_id;
    }

    public void setBuyerID(int buyer_id) {
        this.buyer_id = buyer_id;
    }

}
 

mrBrown

Super-Moderator
Mitarbeiter
@Column(name = "SELLER_ID")
private int seller_id;

ist überflüssig, da das Feld in der Datenbank durch die ManyToOne-Beziehung selbst angelegt wird. Ich hab den Fehler noch nie gesehen, denke aber das liegt daran, die Beziehung legt ein passendes Feld an, und du selbst noch mal
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Kirby.exe Verwirrung beim Query Datenbankprogrammierung 4
Z Beim schließen des Programms die verbindung zur DB beenden. Datenbankprogrammierung 4
C Oracle Fehler beim list.add() Datenbankprogrammierung 5
L MySQL Bekomme einen Fehler beim ResultSet Datenbankprogrammierung 12
H Brauche Hilfe beim Mappen von 3 Tabellen a 1:n mit hbm.xml. Datenbankprogrammierung 34
J Java Eclipse Hilfe beim Programmieren Datenbankprogrammierung 7
V Fehler beim Generierung Fehler beim Generierung java.lang.ArrayIndexOutOfBoundsException: 0 Datenbankprogrammierung 12
H HSQLDB Beim öffnen folgender Fehler: ... java.lang.NullPointerException Datenbankprogrammierung 1
S Hibernate-Konfiguration : Unverständliche Ausgabe beim Ausführen Datenbankprogrammierung 0
ruutaiokwu sql server werte swappen beim update-vorgang mit unique-constraints..? Datenbankprogrammierung 2
C H2 Syntax fehler beim erstellen einer Tabelle Datenbankprogrammierung 4
M MySQL probleme beim "Generate Tables from Entities" Datenbankprogrammierung 9
T MySQL Multithreading beim Datenbankzugriff Datenbankprogrammierung 3
T Fehler beim ausgeben von Tabellen Inhalt Datenbankprogrammierung 9
J Datentyp der Spalte beim Datenbankdesign unbekannt Datenbankprogrammierung 12
S Derby/JavaDB Probleme beim anlegen einer embedded DB Datenbankprogrammierung 13
W No data found: SQL-Abfrage funktioniert nur beim Debuggen Datenbankprogrammierung 3
N HSQLDB Problem beim Treiberladen im Jar Datenbankprogrammierung 6
M Problem beim Erstellen einer Query Datenbankprogrammierung 7
M Datenbankverbindung zu langsam beim Insert? Datenbankprogrammierung 6
Paristick MSSQL - JDBC Exception beim Registrieren Datenbankprogrammierung 5
D JDBC Fehler beim laden der nativen Bibliothek db2jcct2 Datenbankprogrammierung 9
S Problem beim Anlegen einer Tabelle Datenbankprogrammierung 5
L Derby/JavaDB Fehler beim Erstellen einer Tabelle Datenbankprogrammierung 2
T Problem beim schreiben von daten Datenbankprogrammierung 4
S MySQL generelles vorgehen beim connect zu entfernter datenbank Datenbankprogrammierung 3
A Derby/JavaDB Probleme beim Einbinden Datenbankprogrammierung 2
L CLOB-Daten werden beim Einfügen in die Datenbank geändert? Datenbankprogrammierung 5
J MySQL Hibernate: Probleme beim Speichern von OneToMany - Datensätzen Datenbankprogrammierung 2
X Vector Verhalten beim DataModel seltsam Datenbankprogrammierung 6
D MySQL Problem beim einfügen von Double-Zahlen Datenbankprogrammierung 4
U MSSQL Verbindung steht, aber meckert beim Statement Datenbankprogrammierung 2
N Probleme beim Aufruf aus der DB Datenbankprogrammierung 7
cosmic Problem beim Update einer Oracle DB Datenbankprogrammierung 7
T Problem beim Update in die Access DB Datenbankprogrammierung 9
F SQLException fangen beim verbinden mit Hibernate Datenbankprogrammierung 17
M Problem beim Importieren einer Datenbank Datenbankprogrammierung 3
C Datenumwandlungsfehler beim Umwandeln Datenbankprogrammierung 4
S Fehler beim Auslesen von Daten Datenbankprogrammierung 6
V Probleme beim Öffnen "einiger" SuperbaseTabellen p Datenbankprogrammierung 8
G Probleme beim Methodenaufruf einer EJB Datenbankprogrammierung 10
H Beim insert bekomme ich den Fehler missing select keyword Datenbankprogrammierung 2
V Fehlermeldung beim Insert Datenbankprogrammierung 16
G beim lesen der db alte daten bekommen? Datenbankprogrammierung 5
A Problem beim Laden des Treibers Datenbankprogrammierung 5
A Fehler beim Starten des Servers für H2 Database Datenbankprogrammierung 13
A Probleme beim Schreiben in eine CSV-Datei aus einer H2-DB Datenbankprogrammierung 2
G Problem beim einfügen in der Datenbank Datenbankprogrammierung 4
G Problem beim Schreiben eines Dateipfads in MySQL-DB Datenbankprogrammierung 9
J OutOfMemory beim Clob Datenbankprogrammierung 5
D An Access Datenbank andocken ohne sie beim System anzumelden Datenbankprogrammierung 3
M "SQL - Apache" Problem beim laden des Applets Datenbankprogrammierung 4
J Fehlermeldung beim ausführeren dieses Befehles Datenbankprogrammierung 5
G Fehler beim Verbinden Datenbankprogrammierung 4
D Problem beim Zugriff auf eine Oracle-DB Datenbankprogrammierung 23
A Datenbankzugriff per Applet - Problem beim Treiber laden Datenbankprogrammierung 6
E Problem beim laden des JDBC Driver bzw der Database Datenbankprogrammierung 8
M Daten von MySQL nach MSSql probleme beim schreiben Datenbankprogrammierung 3
S JDBC-Anfänger und Probleme beim Treiberfinden etc. Datenbankprogrammierung 4
T Probleme beim Verbindungsaufbau zum SQL 2000 Datenbankprogrammierung 2
P Wie Usernamen beim Einloggen für Combobox übernehmen?HELP Datenbankprogrammierung 2
N Fehler beim matchen von Strings via Query Datenbankprogrammierung 2
K MsAccess immer beim zweiten Update java.sql.SQLException Datenbankprogrammierung 28
T Problem beim Update vom Resultset + Firebird Datenbankprogrammierung 2
R JDBC: Resultset beim Thema MEZ&MESZ Datenbankprogrammierung 12
J Fehler beim PreparedStatement Datenbankprogrammierung 2
P Fehlermeldung beim Erstellen einer neuen Tabelle Datenbankprogrammierung 2
M Problem beim erstellen der DB Datenbankprogrammierung 3
G Problem beim Zugriff SQL 2000 Datenbankprogrammierung 2
6 Hilfe beim Einstieg Datenbankprogrammierung 15
A ClassNotFoundException beim Laden des Oracle-JDBC-Treibers Datenbankprogrammierung 10
A Fehler beim Verbinden zur Oracle-DB Datenbankprogrammierung 6
G Rundungsfehler beim Lesen von Fliesskommazahlen... Datenbankprogrammierung 2
K Problem beim Einlesen von Werten aus einem Textfeld Datenbankprogrammierung 11
V Exception beim Speichern von eingegebenen Daten in Tabelle Datenbankprogrammierung 2
W Fehlermeldung beim Ändern einer jdbTable Datenbankprogrammierung 5
G Fehlermeldung beim Zugriff auf SQL-Server-DB Datenbankprogrammierung 3
E Problem beim Datenbank-Design (relational) Datenbankprogrammierung 10
T compiler fehler: should be mapped with insert="false" update="false" Datenbankprogrammierung 1
L SQL Datenbank INSERT INTO Datenbankprogrammierung 6
L SQL Datenbank Tabelle insert Datenbankprogrammierung 7
O HOW TO INSERT PRIMARY INTO ANOTHER TABLE AND USE IT AS FOREIGN KEY TO DISPLAY DATA IN A RELATIONSHIP Datenbankprogrammierung 3
G Eine Spalte in xampp als Typ array erstellen - ein array mit "insert" hinzufügen. Datenbankprogrammierung 3
C Problem with INSERT.............ON DUPLICATE KEY Datenbankprogrammierung 3
A MySQL Select und Insert in Java Datenbankprogrammierung 15
S PostgreSQL Bytea INSERT Datenbankprogrammierung 8
W Problem mit Insert in zwei Tabellen Datenbankprogrammierung 8
L INSERT INTO Befehl in Java Datenbankprogrammierung 8
L SQL-Statement INSERT INTO ON DUPLICATE KEY UPDATE funktioniert nicht Datenbankprogrammierung 5
D Insert Methode per Servlet Datenbankprogrammierung 2
D Insert Methode per Servlet Datenbankprogrammierung 0
D SQLite INSERT OR REPLACE INTO macht neuen Eintrag?! Datenbankprogrammierung 2
O JDBC Daten in zwei Tabellen mit zwei foreach-Schleifen einfügen (insert into) Datenbankprogrammierung 1
A Oracle insert Array in DB Datenbankprogrammierung 7
C MySQL JTable in JScrollPane nach insert aktualisieren Datenbankprogrammierung 3
X SQLite Erhalte bei Query INSERT INTO eine NullPointerException Datenbankprogrammierung 10
M JAVA Derby INSERT probleme Datenbankprogrammierung 12
Y MySQL Eclipselink Insert JSF Beispiel gesucht Datenbankprogrammierung 2
T MySQL MySQL - Insert into fügt zwei identische Datensätze ein Datenbankprogrammierung 2
M Derby/JavaDB Derby SQL Insert mit AUTO_INCREMENT, welche ID wurde vergeben? Datenbankprogrammierung 6

Ähnliche Java Themen

Neue Themen


Oben