2017-05-01 2 views
0

Ich habe 2 Modelle mit den ff Spalten in der db:Spring MVC Fremd Feld in der Tabelle wird nicht aktualisiert

ContractHeader 
id = primary key 
con_num 

ContractEntitlement 
id = primary key 
ch_id = foreign key to id in ContractHeader table 
category 

Ein Vertragskopf mehrere Vertrag Berechtigung haben kann. Modellklassen sind:

ContractHeader.java

@Entity 
@Table(name = "CONTRACT_HEADER") 
public class ContractHeader { 

    @Id 
    @Column(name = "id", unique = true, nullable = false) 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private int id; 

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "contractHeader") 
    private List<ContractEntitlement> contractEntitlements; 

    @Column(name = "con_num") 
    private String conNum; 
    getter and setter .... 

ContractEntitlement

@Entity 
@Table(name = "CONTRACT_ENTITLEMENT") 
public class ContractEntitlement { 

    @Id 
    @Column(name = "id", unique = true, nullable = false) 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private int id; 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "ch_id", referencedColumnName = "id") 
    private ContractHeader contractHeader; 

    @Column(name = "category") 
    private String category; 

    getter and setter .... 

Wenn ich das Datum speichern von jsp es richtig, den Wert ohne Fehler aus jeder Tabelle im Frühjahr fügt aber das ch_id Feld (Fremdschlüssel) ist immer leer. Irgendeine Idee, warum ch_is nicht von der ID aus der contractheader-Tabelle aufgefüllt wird?

+0

Möchten Sie, dass ch_id automatisch ausgefüllt wird oder Sie einen Wert für ch_id aus dem Formular senden und immer noch Null dafür einfügt? –

+0

Die ID aus dem Vertragskopf wird nach dem Speichern aus der Tabelle (serialisiert) ausgefüllt. Ich ging davon aus, dass die Zuordnung der ID zu ch_id automatisch die ch_id in der Tabelle auffüllen wird. Ich sende die ch_id nicht aus dem Formular. –

+0

Je mehr ich darüber nachdenke, denke ich, dass dies auf der Seite db geschehen muss (Store Procedured). Irgendwelche Kommentare? –

Antwort

1

Dies ist nicht genau eine Antwort auf die Frage, sondern eher eine Problemumgehung und teilen möchten. Statt die Verarbeitung in db Seite bekomme ich die ID, bevor die Sitzung schließt, nachdem es gespeichert wird:

public String addContractHeader(@Validated @ModelAttribute("contractHeader") ContractHeader p, BindingResult bindingResult, Model model) { 

    System.out.println("BEFORE " + p.getId()); 
    this.contractHeaderService.addContractHeader(p); 
    System.out.println("AFTER " + p.getId()); 
    for (Iterator<ContractEntitlement> i = p.getContractEntitlements().iterator(); i.hasNext();) { 
     ContractEntitlement employee = i.next(); 
     -- use p.getId() to store in ch_id (foreign_key) 
     this.contractEntitlementService.addContractEntitlement(employee); 

    } 

BEFORE 0 
Hibernate: insert into CONTRACT_HEADER (contact_email, contact_number, contact_person, contract_number, contract_package, contract_status, contract_sum, contract_type, currency_type, customer_address, customer_name, expiry_date, package_other, remarks, start_date) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) 
Info: INFO : com.at.ccts.dao.ContractHeaderDAOImpl - ContractHeader saved successfully, ContractHeader [email protected] 
2017-05-01T20:01:52.537+0800|Info: 
AFTER 19 

Ich habe die ID in der DB gespeichert (serialisiert).

Verwandte Themen