Quantcast
Viewing all articles
Browse latest Browse all 518

Tutorial of JPA one-to-many persist

Hello everyone,

 

     I have read the official document of Oracle, but I still have some problems about JPA relationships. Suppose that there are two tables: the header table and the item table.  The DDL are following:

   

CREATE TABLE TMP_ZSTEST_HEADER (
  MANDT VARCHAR(3) NOT NULL,
  BUKRS VARCHAR(4) NOT NULL,
  BELNR VARCHAR(10) NOT NULL,
  GJAHR VARCHAR(4) NOT NULL,
  BUTXT VARCHAR(20) NOT NULL,
  WAERS VARCHAR(5) NOT NULL,
  TCODE VARCHAR(20) NOT NULL,
  CONSTRAINT PrimaryKey_Header PRIMARY KEY (MANDT, BUKRS, BELNR, GJAHR)
);

CREATE TABLE TMP_ZSTEST_ITEM (
  MANDT VARCHAR(3) NOT NULL,
  BUKRS VARCHAR(4) NOT NULL,
  BELNR VARCHAR(10) NOT NULL,
  GJAHR VARCHAR(4) NOT NULL,
  BUZEI INTEGER DEFAULT 0 NOT NULL,
  DMBTR DECIMAL(13 , 2) DEFAULT 0 NOT NULL,
  COSTL VARCHAR(10) NOT NULL,
  ZUONR VARCHAR(20) NOT NULL,
  CONSTRAINT PrimaryKey_Item PRIMARY KEY (MANDT, BUKRS, BELNR, GJAHR, BUZEI),
  CONSTRAINT Foreignkey_Header_Item FOREIGN KEY (MANDT,BUKRS,BELNR,GJAHR) REFERENCES TMP_ZSTEST_HEADER(MANDT,BUKRS,BELNR,GJAHR)
);

 

The Entity Classes are following:

 

1. TmpZstestHeader.java

 

package com.sap.entities;

import java.io.Serializable;
import javax.persistence.*;
import java.util.List;


/**
* The persistent class for the TMP_ZSTEST_HEADER database table.
*
*/
@Entity
@Table(name="TMP_ZSTEST_HEADER")
public class TmpZstestHeader implements Serializable {
private static final long serialVersionUID = 1L;

@EmbeddedId
private TmpZstestHeaderPK id;

private String butxt;

private String tcode;

private String waers;

//bi-directional many-to-one association to TmpZstestItem
@OneToMany(mappedBy="tmpZstestHeader", cascade={CascadeType.ALL})
private List<TmpZstestItem> tmpZstestItems;

    public TmpZstestHeader() {
    }

public TmpZstestHeaderPK getId() {
  return this.id;
}

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

public String getButxt() {
  return this.butxt;
}

public void setButxt(String butxt) {
  this.butxt = butxt;
}

public String getTcode() {
  return this.tcode;
}

public void setTcode(String tcode) {
  this.tcode = tcode;
}

public String getWaers() {
  return this.waers;
}

public void setWaers(String waers) {
  this.waers = waers;
}

public List<TmpZstestItem> getTmpZstestItems() {
  return this.tmpZstestItems;
}

public void setTmpZstestItems(List<TmpZstestItem> tmpZstestItems) {
  this.tmpZstestItems = tmpZstestItems;
}

}

 

2. TmpZstestHeaderPK.java

 

package com.sap.entities;

import java.io.Serializable;
import javax.persistence.*;

/**
* The primary key class for the TMP_ZSTEST_HEADER database table.
*
*/
@Embeddable
public class TmpZstestHeaderPK implements Serializable {
//default serial version id, required for serializable classes.
private static final long serialVersionUID = 1L;

private String mandt;

private String bukrs;

private String belnr;

private String gjahr;

    public TmpZstestHeaderPK() {
    }
public String getMandt() {
  return this.mandt;
}
public void setMandt(String mandt) {
  this.mandt = mandt;
}
public String getBukrs() {
  return this.bukrs;
}
public void setBukrs(String bukrs) {
  this.bukrs = bukrs;
}
public String getBelnr() {
  return this.belnr;
}
public void setBelnr(String belnr) {
  this.belnr = belnr;
}
public String getGjahr() {
  return this.gjahr;
}
public void setGjahr(String gjahr) {
  this.gjahr = gjahr;
}

public boolean equals(Object other) {
  if (this == other) {
   return true;
  }
  if (!(other instanceof TmpZstestHeaderPK)) {
   return false;
  }
  TmpZstestHeaderPK castOther = (TmpZstestHeaderPK)other;
  return
   this.mandt.equals(castOther.mandt)
   && this.bukrs.equals(castOther.bukrs)
   && this.belnr.equals(castOther.belnr)
   && this.gjahr.equals(castOther.gjahr);

    }
   
public int hashCode() {
  final int prime = 31;
  int hash = 17;
  hash = hash * prime + this.mandt.hashCode();
  hash = hash * prime + this.bukrs.hashCode();
  hash = hash * prime + this.belnr.hashCode();
  hash = hash * prime + this.gjahr.hashCode();
 
  return hash;
    }
}

 

 

3. TmpZstestItem.java

 

package com.sap.entities;

import java.io.Serializable;
import javax.persistence.*;
import java.math.BigDecimal;


/**
* The persistent class for the TMP_ZSTEST_ITEM database table.
*
*/
@Entity
@Table(name="TMP_ZSTEST_ITEM")
public class TmpZstestItem implements Serializable {
private static final long serialVersionUID = 1L;

@EmbeddedId
private TmpZstestItemPK id;

private String costl;

private BigDecimal dmbtr;

private String zuonr;

//bi-directional many-to-one association to TmpZstestHeader
@ManyToOne(cascade={CascadeType.ALL})
@JoinColumns({
  @JoinColumn(name="BELNR", referencedColumnName="BELNR"),
  @JoinColumn(name="BUKRS", referencedColumnName="BUKRS"),
  @JoinColumn(name="GJAHR", referencedColumnName="GJAHR"),
  @JoinColumn(name="MANDT", referencedColumnName="MANDT")
  })
private TmpZstestHeader tmpZstestHeader;

    public TmpZstestItem() {
    }

public TmpZstestItemPK getId() {
  return this.id;
}

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

public String getCostl() {
  return this.costl;
}

public void setCostl(String costl) {
  this.costl = costl;
}

public BigDecimal getDmbtr() {
  return this.dmbtr;
}

public void setDmbtr(BigDecimal dmbtr) {
  this.dmbtr = dmbtr;
}

public String getZuonr() {
  return this.zuonr;
}

public void setZuonr(String zuonr) {
  this.zuonr = zuonr;
}

public TmpZstestHeader getTmpZstestHeader() {
  return this.tmpZstestHeader;
}

public void setTmpZstestHeader(TmpZstestHeader tmpZstestHeader) {
  this.tmpZstestHeader = tmpZstestHeader;
}

}

 

4. TmpZstestItemPK.java

 

package com.sap.entities;

import java.io.Serializable;
import javax.persistence.*;

/**
* The primary key class for the TMP_ZSTEST_ITEM database table.
*
*/
@Embeddable
public class TmpZstestItemPK implements Serializable {
//default serial version id, required for serializable classes.
private static final long serialVersionUID = 1L;

private String mandt;

private String bukrs;

private String belnr;

private String gjahr;

private int buzei;

    public TmpZstestItemPK() {
    }
public String getMandt() {
  return this.mandt;
}
public void setMandt(String mandt) {
  this.mandt = mandt;
}
public String getBukrs() {
  return this.bukrs;
}
public void setBukrs(String bukrs) {
  this.bukrs = bukrs;
}
public String getBelnr() {
  return this.belnr;
}
public void setBelnr(String belnr) {
  this.belnr = belnr;
}
public String getGjahr() {
  return this.gjahr;
}
public void setGjahr(String gjahr) {
  this.gjahr = gjahr;
}
public int getBuzei() {
  return this.buzei;
}
public void setBuzei(int buzei) {
  this.buzei = buzei;
}

public boolean equals(Object other) {
  if (this == other) {
   return true;
  }
  if (!(other instanceof TmpZstestItemPK)) {
   return false;
  }
  TmpZstestItemPK castOther = (TmpZstestItemPK)other;
  return
   this.mandt.equals(castOther.mandt)
   && this.bukrs.equals(castOther.bukrs)
   && this.belnr.equals(castOther.belnr)
   && this.gjahr.equals(castOther.gjahr)
   && (this.buzei == castOther.buzei);

    }
   
public int hashCode() {
  final int prime = 31;
  int hash = 17;
  hash = hash * prime + this.mandt.hashCode();
  hash = hash * prime + this.bukrs.hashCode();
  hash = hash * prime + this.belnr.hashCode();
  hash = hash * prime + this.gjahr.hashCode();
  hash = hash * prime + this.buzei;
 
  return hash;
    }
}

 

 

My Session Class is following:

 

Session.java

 

package com.sap.session;

import javax.ejb.Stateless;
import javax.persistence.*;

import com.sap.entities.*;

/**
* Session Bean implementation class Session
*/
@Stateless
public class Session implements SessionLocal {
    @PersistenceUnit(unitName = "unitName")
private EntityManagerFactory emf;
private EntityManager em;
    /**
     * Default constructor.
     */
    public Session() {
        // TODO Auto-generated constructor stub
    }
   
    public void AddFromHeader(TmpZstestHeader entity){
     em = emf.createEntityManager();
     em.persist(entity);
     em.flush();
    }
   
    public void AddFromItem(TmpZstestItem entity){
     em = emf.createEntityManager();
     em.persist(entity);
     em.flush();
    }
}

 

 

But when I run the method AddFromHeader, the exception indicates that the four columns MANDT, BUKRS, BELNR, GJAHR are not unique.

 

How can I do if I want to create entities in table TMP_ZSTEST_ITEM when I persist the entity of TMP_ZSTEST_HEADER?

 

Is there any tutorial about this?

 

 

 

Regards,

 

Zhongsheng Xu


Viewing all articles
Browse latest Browse all 518

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>