2017-02-10 3 views
0

Hey Ich versuche, Daten in die Datenbank einzufügen, aber Fehler erhalten, ich lese bereits alle aus Stackoverflow, kann aber meine Lösung nicht bekommen.Hinzufügen oder Aktualisieren einer untergeordneten Zeile nicht möglich: eine Fremdschlüsseleinschränkung schlägt in Hibernate fehl

kann nicht hinzugefügt oder ein Kind Zeile aktualisieren: ein Fremdschlüssel fehlschlägt (. posexchange_order_detail, CONSTRAINT FK_5ed8cb725cbc40e2be44a4ab3d9 FOREIGN KEY (GOODS_DETAIL_ID2) LITERATUR goods_detail (ID))

Hier ist mein Code

package com.istana.pos.db.domain; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.FetchType; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.JoinColumn; 
import javax.persistence.ManyToOne; 
import javax.persistence.Table; 

@SuppressWarnings("serial") 
@Entity 
@Table(name = "EXCHANGE_ORDER_DETAIL", schema = "pos") 
public class ExchangeOrderDetail implements java.io.Serializable { 

    private int id; 
    private String exchangeNumber; 
    private Integer goodsDetailId1; 
    private Integer goodsDetailId2; 
    private double price1; 
    private double price2; 
    private double discount1; 
    private double discount2; 

    private ExchangeOrder exchangeOrder; 
    private GoodsDetail goodsDetail1; 
    private GoodsDetail goodsDetail2; 

    @Id 
    @Column(name = "ID", unique = true, nullable = false) 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    public int getId() { 
     return this.id; 
    } 

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

    @Column(name = "EXCHANGE_NUMBER", nullable = false) 
    public String getExchangeNumber() { 
     return exchangeNumber; 
    } 

    public void setExchangeNumber(String exchangeNumber) { 
     this.exchangeNumber = exchangeNumber; 
    } 

    @Column(name = "GOODS_DETAIL_ID1", nullable = false) 
    public Integer getGoodsDetailId1() { 
     return goodsDetailId1; 
    } 

    public void setGoodsDetailId1(int goodsDetailId1) { 
     this.goodsDetailId1 = goodsDetailId1; 
    } 

    @Column(name = "GOODS_DETAIL_ID2", nullable = false) 
    public Integer getGoodsDetailId2() { 
     return goodsDetailId2; 
    } 

    public void setGoodsDetailId2(int goodsDetailId2) { 
     this.goodsDetailId2 = goodsDetailId2; 
    } 

    @Column(name = "PRICE1") 
    public double getPrice1() { 
     return price1; 
    } 

    public void setPrice1(double price1) { 
     this.price1 = price1; 
    } 

    @Column(name = "PRICE2") 
    public double getPrice2() { 
     return price2; 
    } 

    public void setPrice2(double price2) { 
     this.price2 = price2; 
    } 

    @Column(name = "DISCOUNT1") 
    public double getDiscount1() { 
     return discount1; 
    } 

    public void setDiscount1(double discount1) { 
     this.discount1 = discount1; 
    } 

    @Column(name = "DISCOUNT2") 
    public double getDiscount2() { 
     return discount2; 
    } 

    public void setDiscount2(double discount2) { 
     this.discount2 = discount2; 
    } 

    @ManyToOne(fetch = FetchType.EAGER) 
    @JoinColumn(name = "EXCHANGE_NUMBER", nullable = true, insertable = false, updatable = false, referencedColumnName = "EXCHANGE_NUMBER") 
    public ExchangeOrder getExchangeOrder() { 
     return exchangeOrder; 
    } 

    public void setExchangeOrder(ExchangeOrder exchangeOrder) { 
     this.exchangeOrder = exchangeOrder; 
    } 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "GOODS_DETAIL_ID1", nullable = false, insertable = false, updatable = false, referencedColumnName = "ID") 
    public GoodsDetail getGoodsDetail1() { 
     return goodsDetail1; 
    } 

    public void setGoodsDetail1(GoodsDetail goodsDetail1) { 
     this.goodsDetail1 = goodsDetail1; 
    } 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "GOODS_DETAIL_ID2", nullable = false, insertable = false, updatable = false, referencedColumnName = "ID") 
    public GoodsDetail getGoodsDetail2() { 
     return goodsDetail2; 
    } 

    public void setGoodsDetail2(GoodsDetail goodsDetail2) { 
     this.goodsDetail2 = goodsDetail2; 
    } 

} 

Ein weiterer Java-Klasse

package com.istana.pos.db.domain; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.FetchType; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.JoinColumn; 
import javax.persistence.ManyToOne; 
import javax.persistence.Table; 

@SuppressWarnings("serial") 
@Entity 
@Table(name = "EXCHANGE_ORDER_DETAIL", schema = "pos") 
public class ExchangeOrderDetail implements java.io.Serializable { 

    private int id; 
    private String exchangeNumber; 
    private Integer goodsDetailId1; 
    private Integer goodsDetailId2; 
    private double price1; 
    private double price2; 
    private double discount1; 
    private double discount2; 

    private ExchangeOrder exchangeOrder; 
    private GoodsDetail goodsDetail1; 
    private GoodsDetail goodsDetail2; 

    @Id 
    @Column(name = "ID", unique = true, nullable = false) 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    public int getId() { 
     return this.id; 
    } 

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

    @Column(name = "EXCHANGE_NUMBER", nullable = false) 
    public String getExchangeNumber() { 
     return exchangeNumber; 
    } 

    public void setExchangeNumber(String exchangeNumber) { 
     this.exchangeNumber = exchangeNumber; 
    } 

    @Column(name = "GOODS_DETAIL_ID1", nullable = false) 
    public Integer getGoodsDetailId1() { 
     return goodsDetailId1; 
    } 

    public void setGoodsDetailId1(int goodsDetailId1) { 
     this.goodsDetailId1 = goodsDetailId1; 
    } 

    @Column(name = "GOODS_DETAIL_ID2", nullable = false) 
    public Integer getGoodsDetailId2() { 
     return goodsDetailId2; 
    } 

    public void setGoodsDetailId2(int goodsDetailId2) { 
     this.goodsDetailId2 = goodsDetailId2; 
    } 

    @Column(name = "PRICE1") 
    public double getPrice1() { 
     return price1; 
    } 

    public void setPrice1(double price1) { 
     this.price1 = price1; 
    } 

    @Column(name = "PRICE2") 
    public double getPrice2() { 
     return price2; 
    } 

    public void setPrice2(double price2) { 
     this.price2 = price2; 
    } 

    @Column(name = "DISCOUNT1") 
    public double getDiscount1() { 
     return discount1; 
    } 

    public void setDiscount1(double discount1) { 
     this.discount1 = discount1; 
    } 

    @Column(name = "DISCOUNT2") 
    public double getDiscount2() { 
     return discount2; 
    } 

    public void setDiscount2(double discount2) { 
     this.discount2 = discount2; 
    } 

    @ManyToOne(fetch = FetchType.EAGER) 
    @JoinColumn(name = "EXCHANGE_NUMBER", nullable = true, insertable = false, updatable = false, referencedColumnName = "EXCHANGE_NUMBER") 
    public ExchangeOrder getExchangeOrder() { 
     return exchangeOrder; 
    } 

    public void setExchangeOrder(ExchangeOrder exchangeOrder) { 
     this.exchangeOrder = exchangeOrder; 
    } 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "GOODS_DETAIL_ID1", nullable = false, insertable = false, updatable = false, referencedColumnName = "ID") 
    public GoodsDetail getGoodsDetail1() { 
     return goodsDetail1; 
    } 

    public void setGoodsDetail1(GoodsDetail goodsDetail1) { 
     this.goodsDetail1 = goodsDetail1; 
    } 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "GOODS_DETAIL_ID2", nullable = false, insertable = false, updatable = false, referencedColumnName = "ID") 
    public GoodsDetail getGoodsDetail2() { 
     return goodsDetail2; 
    } 

    public void setGoodsDetail2(GoodsDetail goodsDetail2) { 
     this.goodsDetail2 = goodsDetail2; 
    } 

} 

Und hier ist der Service zum Erstellen der Daten

public ExchangeOrder createExchangeOrder(ExchangeOrder domain, List<ExchangeOrderDetail> details, List<BankPayment> bankPayments) { 
     ExchangeOrder newDomain = exchangeOrderDao.saveNew(domain); 
     if (domain != null) { 
      for (ExchangeOrderDetail detail : details) { 
       System.out.println("saving exchange order 2"); 
       if (d.getGoodsDetail2() != null) { 
        detail.setExchangeNumber(newDomain.getExchangeNumber()); 
        detail.setExchangeOrder(newDomain); 
        exchangeOrderDetailDao.saveNew(detail); 
       } 
      } 
      for (BankPayment bp : bankPayments) { 
       bp.setTransactionNumber(domain.getExchangeNumber()); 
       bankPaymentDao.saveNew(bp); 
      } 
     } 
     return newDomain; 
    } 

Vielen Dank vorher.

Antwort

0

Ich sehe ein paar mögliche Probleme, die dies verursachen können:

  1. Gibt es Gründe, warum Sie verwenden beide ein Integer mit einem für GOODS_DETAIL_ID1@Column kommentiert und auch ein @ManyToOne für GOODS_DETAIL_ID1 Spalte in derselben Klasse?
  2. Da die @Column Annotation besagt, dass der Wert für goodsDetail1 und goodsDetail2 nicht-null sein muss, aber ich sehe nicht, dass Sie diese Werte in den Code, den Sie zur Verfügung gestellt. Versuchen Sie also, die Duplikatspaltedeklaration zu entfernen und stellen Sie sicher, dass
  3. Wenn die GoodsDetail Entitäten festgelegt werden, stellen Sie sicher, dass Sie sie gespeichert haben, BEVOR Sie die ExchangeOrderDetail speichern, da keine explizite Kaskadenspeicherung stattfindet.
Verwandte Themen

 Verwandte Themen