JPA - การแมปขั้นสูง

JPA เป็นไลบรารีที่เผยแพร่พร้อมข้อกำหนดจาวา ดังนั้นจึงสนับสนุนแนวคิดเชิงวัตถุทั้งหมดสำหรับการคงอยู่ของเอนทิตี จนถึงตอนนี้เราได้ทำพื้นฐานของการทำแผนที่เชิงสัมพันธ์กันเรียบร้อยแล้ว บทนี้จะนำคุณไปสู่การแมปขั้นสูงระหว่างอ็อบเจ็กต์และเอนทิตีเชิงสัมพันธ์

กลยุทธ์การสืบทอด

การสืบทอดเป็นแนวคิดหลักของภาษาเชิงวัตถุดังนั้นเราจึงสามารถใช้ความสัมพันธ์หรือกลยุทธ์การสืบทอดระหว่างเอนทิตี JPA รองรับกลยุทธ์การสืบทอดสามประเภทเช่น SINGLE_TABLE, JOINED_TABLE และ TABLE_PER_CONCRETE_CLASS

ให้เราพิจารณาตัวอย่างของชั้นเรียน Staff, TeachingStaff, NonTeachingStaff และความสัมพันธ์ของพวกเขาดังต่อไปนี้:

ในแผนภาพที่แสดงด้านบน Staff คือเอนทิตีและ TeachingStaff และ NonTeachingStaff เป็นเอนทิตีย่อยของ Staff ในที่นี้เราจะกล่าวถึงตัวอย่างข้างต้นในกลยุทธ์การสืบทอดทั้งสามประการ

กลยุทธ์ตารางเดียว

กลยุทธ์ Single-Table จะใช้ฟิลด์คลาสทั้งหมด (ทั้งคลาสซุปเปอร์และคลาสย่อย) และแมปลงในตารางเดียวที่เรียกว่ากลยุทธ์ SINGLE_TABLE ค่าตัวเลือกที่นี่มีบทบาทสำคัญในการแยกแยะค่าของสามเอนทิตีในตารางเดียว

ให้เราพิจารณาตัวอย่างข้างต้น TeachingStaff และ NonTeachingStaff เป็นคลาสย่อยของเจ้าหน้าที่ประจำชั้น เตือนแนวคิดเรื่องการสืบทอด (เป็นกลไกของการสืบทอดคุณสมบัติของซุปเปอร์คลาสโดยคลาสย่อย) ดังนั้น sid sname คือฟิลด์ที่เป็นของทั้ง TeachingStaff และ NonTeachingStaff สร้างโครงการ JPA โมดูลทั้งหมดของโครงการนี้มีดังนี้:

การสร้างเอนทิตี

สร้างแพ็คเกจชื่อ ‘com.tutorialspoint.eclipselink.entity’ ภายใต้ ‘src’แพ็คเกจ สร้างคลาส java ใหม่ชื่อStaff.javaภายใต้แพ็คเกจที่กำหนด คลาสเอนทิตีพนักงานแสดงดังนี้:

package com.tutorialspoint.eclipselink.entity;

import java.io.Serializable;

import javax.persistence.DiscriminatorColumn;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Table;

@Entity
@Table
@Inheritance( strategy = InheritanceType.SINGLE_TABLE )
@DiscriminatorColumn( name = "type" )

public class Staff implements Serializable {
   @Id
   @GeneratedValue( strategy = GenerationType.AUTO )
   
   private int sid;
   private String sname;
   
   public Staff( int sid, String sname ) {
      super( );
      this.sid = sid;
      this.sname = sname;
   }
   
   public Staff( ) {
      super( );
   }
   
   public int getSid( ) {
      return sid;
   }
   
   public void setSid( int sid ) {
      this.sid = sid;
   }
   
   public String getSname( ) {
      return sname;
   }
   
   public void setSname( String sname ) {
      this.sname = sname;
   }
}

ในรหัสด้านบน @DescriminatorColumn ระบุชื่อฟิลด์ (type) และค่าของมันจะแสดงฟิลด์ (Teaching and NonTeachingStaff) ที่เหลือ

สร้างคลาสย่อย (คลาส) ไปยังคลาส Staff ที่ชื่อ TeachingStaff.java ภายใต้ com.tutorialspoint.eclipselink.entityแพ็คเกจ คลาส TeachingStaff Entity แสดงดังนี้:

package com.tutorialspoint.eclipselink.entity;

import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;

@Entity
@DiscriminatorValue( value="TS" )
public class TeachingStaff extends Staff {

   private String qualification;
   private String subjectexpertise;

   public TeachingStaff( int sid, String sname, 
   
   String qualification,String subjectexpertise ) {
      super( sid, sname );
      this.qualification = qualification;
      this.subjectexpertise = subjectexpertise;
   }

   public TeachingStaff( ) {
      super( );
   }

   public String getQualification( ){
      return qualification;
   }

   public void setQualification( String qualification ){
      this.qualification = qualification;
   }

   public String getSubjectexpertise( ) {
      return subjectexpertise;
   }

   public void setSubjectexpertise( String subjectexpertise ){
      this.subjectexpertise = subjectexpertise;
   }
}

สร้างคลาสย่อย (คลาส) ไปยังคลาส Staff ที่ชื่อ NonTeachingStaff.java ภายใต้ com.tutorialspoint.eclipselink.entityแพ็คเกจ คลาส NonTeachingStaff Entity แสดงดังนี้:

package com.tutorialspoint.eclipselink.entity;

import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;

@Entity
@DiscriminatorValue( value = "NS" )

public class NonTeachingStaff extends Staff {
   private String areaexpertise;

   public NonTeachingStaff( int sid, String sname, String areaexpertise ) {
      super( sid, sname );
      this.areaexpertise = areaexpertise;
   }

   public NonTeachingStaff( ) {
      super( );
   }

   public String getAreaexpertise( ) {
      return areaexpertise;
   }

   public void setAreaexpertise( String areaexpertise ){
      this.areaexpertise = areaexpertise;
   }
}

Persistence.xml

ไฟล์ Persistence.xml มีข้อมูลคอนฟิกูเรชันของฐานข้อมูลและข้อมูลการลงทะเบียนของคลาสเอนทิตี ไฟล์ xml จะแสดงดังนี้:

<?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="Eclipselink_JPA" transaction-type="RESOURCE_LOCAL">
   
      <class>com.tutorialspoint.eclipselink.entity.Staff</class>
      <class>com.tutorialspoint.eclipselink.entity.NonTeachingStaff</class>
      <class>com.tutorialspoint.eclipselink.entity.TeachingStaff</class>
      
      <properties>
         <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/jpadb"/>
         <property name="javax.persistence.jdbc.user" value="root"/>
         <property name="javax.persistence.jdbc.password" value="root"/>
         <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
         <property name="eclipselink.logging.level" value="FINE"/>
         <property name="eclipselink.ddl-generation" value="create-tables"/>
      </properties>
      
   </persistence-unit>
</persistence>

ชั้นบริการ

คลาสบริการเป็นส่วนหนึ่งของการดำเนินการขององค์ประกอบทางธุรกิจ สร้างแพ็คเกจภายใต้‘src’ ชื่อแพ็คเกจ ‘com.tutorialspoint.eclipselink.service’.

สร้างคลาสชื่อ SaveClient.java ภายใต้แพ็กเกจที่กำหนดเพื่อเก็บฟิลด์คลาส Staff, TeachingStaff และ NonTeachingStaff คลาส SaveClient แสดงดังนี้:

package com.tutorialspoint.eclipselink.service;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.tutorialspoint.eclipselink.entity.NonTeachingStaff;
import com.tutorialspoint.eclipselink.entity.TeachingStaff;

public class SaveClient {

   public static void main( String[ ] args ) {
   
      EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" );
      EntityManager entitymanager = emfactory.createEntityManager( );
      entitymanager.getTransaction( ).begin( );

      //Teaching staff entity 
      TeachingStaff ts1=new TeachingStaff(1,"Gopal","MSc MEd","Maths");
      TeachingStaff ts2=new TeachingStaff(2, "Manisha", "BSc BEd", "English");
      
      //Non-Teaching Staff entity
      NonTeachingStaff nts1=new NonTeachingStaff(3, "Satish", "Accounts");
      NonTeachingStaff nts2=new NonTeachingStaff(4, "Krishna", "Office Admin");

      //storing all entities
      entitymanager.persist(ts1);
      entitymanager.persist(ts2);
      entitymanager.persist(nts1);
      entitymanager.persist(nts2);
      
      entitymanager.getTransaction().commit();
      
      entitymanager.close();
      emfactory.close();
   }
}

หลังจากรวบรวมและดำเนินการโปรแกรมข้างต้นคุณจะได้รับการแจ้งเตือนในแผงคอนโซลของ Eclipse IDE ตรวจสอบ MySQL workbench สำหรับเอาต์พุต ผลลัพธ์ในรูปแบบตารางจะแสดงดังนี้:

ซิด ประเภท Sname Areaexpertise คุณสมบัติ เรื่องความเชี่ยวชาญ
1 TS โกปาล MSC MED คณิตศาสตร์
2 TS มานิชา บีเอสซีเบด ภาษาอังกฤษ
3 NS Satish บัญชี
4 NS กฤษณะ ผู้ดูแลระบบสำนักงาน

ในที่สุดคุณจะได้รับตารางเดียวซึ่งมีทั้งสามเขตข้อมูลของคลาสและแตกต่างกับคอลัมน์ตัวเลือกที่ชื่อ ‘Type’ (สนาม).

เข้าร่วมกลยุทธ์ตาราง

กลยุทธ์ตารางที่เข้าร่วมคือการแบ่งปันคอลัมน์ที่อ้างอิงซึ่งมีค่าเฉพาะเพื่อเข้าร่วมตารางและทำธุรกรรมได้ง่าย ให้เราพิจารณาตัวอย่างเดียวกับด้านบน

สร้างโครงการ JPA โมดูลโครงการทั้งหมดที่แสดงดังต่อไปนี้:

การสร้างเอนทิตี

สร้างแพ็คเกจชื่อ ‘com.tutorialspoint.eclipselink.entity’ ภายใต้ ‘src’แพ็คเกจ สร้างคลาส java ใหม่ชื่อStaff.javaภายใต้แพ็คเกจที่กำหนด คลาสเอนทิตีพนักงานแสดงดังนี้:

package com.tutorialspoint.eclipselink.entity;

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Table;

@Entity
@Table
@Inheritance( strategy = InheritanceType.JOINED )

public class Staff implements Serializable {

   @Id
   @GeneratedValue( strategy = GenerationType.AUTO )
   
   private int sid;
   private String sname;
   
   public Staff( int sid, String sname ) {
      super( );
      this.sid = sid;
      this.sname = sname;
   }
   
   public Staff( ) {
      super( );
   }
   
   public int getSid( ) {
      return sid;
   }
   
   public void setSid( int sid ) {
      this.sid = sid;
   }
   
   public String getSname( ) {
      return sname;
   }
   
   public void setSname( String sname ) {
      this.sname = sname;
   }
}

สร้างคลาสย่อย (คลาส) ไปยังคลาส Staff ที่ชื่อ TeachingStaff.java ภายใต้ com.tutorialspoint.eclipselink.entityแพ็คเกจ คลาส TeachingStaff Entity แสดงดังนี้:

package com.tutorialspoint.eclipselink.entity;

import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;

@Entity
@PrimaryKeyJoinColumn(referencedColumnName="sid")

public class TeachingStaff extends Staff {
   private String qualification;
   private String subjectexpertise;

   public TeachingStaff( int sid, String sname, 
   
   String qualification,String subjectexpertise ) {
      super( sid, sname );
      this.qualification = qualification;
      this.subjectexpertise = subjectexpertise;
   }

   public TeachingStaff( ) {
      super( );
   }

   public String getQualification( ){
      return qualification;
   }

   public void setQualification( String qualification ){
      this.qualification = qualification;
   }

   public String getSubjectexpertise( ) {
      return subjectexpertise;
   }

   public void setSubjectexpertise( String subjectexpertise ){
      this.subjectexpertise = subjectexpertise;
   }
}

สร้างคลาสย่อย (คลาส) ไปยังคลาส Staff ที่ชื่อ NonTeachingStaff.java ภายใต้ com.tutorialspoint.eclipselink.entityแพ็คเกจ คลาส NonTeachingStaff Entity แสดงดังนี้:

package com.tutorialspoint.eclipselink.entity;

import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;

@Entity
@PrimaryKeyJoinColumn(referencedColumnName="sid")

public class NonTeachingStaff extends Staff {
   private String areaexpertise;

   public NonTeachingStaff( int sid, String sname, String areaexpertise ) {
      super( sid, sname );
      this.areaexpertise = areaexpertise;
   }

   public NonTeachingStaff( ) {
      super( );
   }

   public String getAreaexpertise( ) {
      return areaexpertise;
   }

   public void setAreaexpertise( String areaexpertise ) {
      this.areaexpertise = areaexpertise;
   }
}

Persistence.xml

ไฟล์ Persistence.xml มีข้อมูลคอนฟิกูเรชันของฐานข้อมูลและข้อมูลการลงทะเบียนของคลาสเอนทิตี ไฟล์ xml จะแสดงดังนี้:

<?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 = "Eclipselink_JPA" transaction-type = "RESOURCE_LOCAL">
      <class>com.tutorialspoint.eclipselink.entity.Staff</class>
      <class>com.tutorialspoint.eclipselink.entity.NonTeachingStaff</class>
      <class>com.tutorialspoint.eclipselink.entity.TeachingStaff</class>
      
      <properties>
         <property name = "javax.persistence.jdbc.url" value = "jdbc:mysql://localhost:3306/jpadb"/>
         <property name = "javax.persistence.jdbc.user" value = "root"/>
         <property name = "javax.persistence.jdbc.password" value = "root"/>
         <property name = "javax.persistence.jdbc.driver" value = "com.mysql.jdbc.Driver"/>
         <property name = "eclipselink.logging.level" value = "FINE"/>
         <property name = "eclipselink.ddl-generation" value = "create-tables"/>
      </properties>
      
   </persistence-unit>
</persistence>

ชั้นบริการ

คลาสบริการเป็นส่วนหนึ่งของการดำเนินการขององค์ประกอบทางธุรกิจ สร้างแพ็คเกจภายใต้‘src’ ชื่อแพ็คเกจ ‘com.tutorialspoint.eclipselink.service’.

สร้างคลาสชื่อ SaveClient.java ภายใต้แพ็กเกจที่กำหนดเพื่อเก็บฟิลด์คลาส Staff, TeachingStaff และ NonTeachingStaff จากนั้นคลาส SaveClient ดังนี้:

package com.tutorialspoint.eclipselink.service;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.tutorialspoint.eclipselink.entity.NonTeachingStaff;
import com.tutorialspoint.eclipselink.entity.TeachingStaff;

public class SaveClient {
   public static void main( String[ ] args ) {
      EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" );
      EntityManager entitymanager = emfactory.createEntityManager( );
      entitymanager.getTransaction( ).begin( );

      //Teaching staff entity 
      TeachingStaff ts1 = new TeachingStaff(1,"Gopal","MSc MEd","Maths");
      TeachingStaff ts2 = new TeachingStaff(2, "Manisha", "BSc BEd", "English");
      
      //Non-Teaching Staff entity
      NonTeachingStaff nts1 = new NonTeachingStaff(3, "Satish", "Accounts");
      NonTeachingStaff nts2 = new NonTeachingStaff(4, "Krishna", "Office Admin");

      //storing all entities
      entitymanager.persist(ts1);
      entitymanager.persist(ts2);
      entitymanager.persist(nts1);
      entitymanager.persist(nts2);

      entitymanager.getTransaction().commit();
      entitymanager.close();
      emfactory.close();
   }
}

หลังจากรวบรวมและดำเนินการโปรแกรมข้างต้นคุณจะได้รับการแจ้งเตือนในแผงคอนโซลของ Eclipse IDE สำหรับผลลัพธ์ตรวจสอบ MySQL workbench ดังต่อไปนี้:

ที่นี่สามตารางถูกสร้างขึ้นและผลลัพธ์ของ staff ตารางในรูปแบบตารางจะแสดงดังนี้:

ซิด Dtype Sname
1 การสอน โกปาล
2 การสอน มานิชา
3 NonTeachingStaff Satish
4 NonTeachingStaff กฤษณะ

ผลของ TeachingStaff ตารางในรูปแบบตารางจะแสดงดังนี้:

ซิด คุณสมบัติ เรื่องความเชี่ยวชาญ
1 MSC MED คณิตศาสตร์
2 บีเอสซีเบด ภาษาอังกฤษ

ในตารางด้านบนคือคีย์ต่างประเทศ (ตารางเจ้าหน้าที่ฟอร์มฟิลด์อ้างอิง) ผลลัพธ์ของ NonTeachingStaff ตารางในรูปแบบตารางจะแสดงดังนี้:

ซิด Areaexpertise
3 บัญชี
4 ผู้ดูแลระบบสำนักงาน

ในที่สุดตารางทั้งสามจะถูกสร้างขึ้นโดยใช้ฟิลด์ตามลำดับและฟิลด์ SID ถูกแชร์โดยทั้งสามตาราง ในตารางพนักงาน SID เป็นคีย์หลักในตารางที่เหลือ (TeachingStaff และ NonTeachingStaff) SID เป็นคีย์ต่างประเทศ

ตารางต่อชั้นเรียน

กลยุทธ์ตารางต่อคลาสคือการสร้างตารางสำหรับแต่ละเอนทิตีย่อย ตารางเจ้าหน้าที่จะถูกสร้างขึ้น แต่จะมีระเบียนว่าง ค่าฟิลด์ของตารางพนักงานต้องแชร์โดยตาราง TeachingStaff และ NonTeachingStaff

ให้เราพิจารณาตัวอย่างเดียวกับด้านบน โมดูลทั้งหมดของโครงการนี้แสดงดังต่อไปนี้:

การสร้างเอนทิตี

สร้างแพ็คเกจชื่อ ‘com.tutorialspoint.eclipselink.entity’ ภายใต้ ‘src’แพ็คเกจ สร้างคลาส java ใหม่ชื่อStaff.javaภายใต้แพ็คเกจที่กำหนด คลาสเอนทิตีพนักงานแสดงดังนี้:

package com.tutorialspoint.eclipselink.entity;

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Table;

@Entity
@Table
@Inheritance( strategy = InheritanceType.TABLE_PER_CLASS )

public class Staff implements Serializable {

   @Id
   @GeneratedValue( strategy = GenerationType.AUTO )

   private int sid;
   private String sname;

   public Staff( int sid, String sname ) {
      super( );
      this.sid = sid;
      this.sname = sname;
   }

   public Staff( ) {
      super( );
   }

   public int getSid( ) {
      return sid;
   }

   public void setSid( int sid ) {
      this.sid = sid;
   }

   public String getSname( ) {
      return sname;
   }

   public void setSname( String sname ) {
      this.sname = sname;
   }
}

สร้างคลาสย่อย (คลาส) ไปยังคลาส Staff ที่ชื่อ TeachingStaff.java ภายใต้ com.tutorialspoint.eclipselink.entityแพ็คเกจ คลาส TeachingStaff Entity แสดงดังนี้:

package com.tutorialspoint.eclipselink.entity;

import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;

@Entity
public class TeachingStaff extends Staff {
   private String qualification;
   private String subjectexpertise;

   public TeachingStaff( int sid, String sname, String qualification, String subjectexpertise ) {
      super( sid, sname );
      this.qualification = qualification;
      this.subjectexpertise = subjectexpertise;
   }

   public TeachingStaff( ) {
      super( );
   }

   public String getQualification( ){
      return qualification;
   }
   
   public void setQualification( String qualification ) {
      this.qualification = qualification;
   }

   public String getSubjectexpertise( ) {
      return subjectexpertise;
   }

   public void setSubjectexpertise( String subjectexpertise ){
      this.subjectexpertise = subjectexpertise;
   }
}

สร้างคลาสย่อย (คลาส) ไปยังคลาส Staff ที่ชื่อ NonTeachingStaff.java ภายใต้ com.tutorialspoint.eclipselink.entityแพ็คเกจ คลาส NonTeachingStaff Entity แสดงดังนี้:

package com.tutorialspoint.eclipselink.entity;

import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;

@Entity
public class NonTeachingStaff extends Staff {
   private String areaexpertise;

   public NonTeachingStaff( int sid, String sname, String areaexpertise ) {
      super( sid, sname );
      this.areaexpertise = areaexpertise;
   }

   public NonTeachingStaff( ) {
      super( );
   }

   public String getAreaexpertise( ) {
      return areaexpertise;
   }

   public void setAreaexpertise( String areaexpertise ) {
      this.areaexpertise = areaexpertise;
   }
}

Persistence.xml

ไฟล์ Persistence.xml มีข้อมูลคอนฟิกูเรชันของฐานข้อมูลและข้อมูลการลงทะเบียนของคลาสเอนทิตี ไฟล์ xml จะแสดงดังนี้:

<?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 = "Eclipselink_JPA" transaction-type = "RESOURCE_LOCAL">
      <class>com.tutorialspoint.eclipselink.entity.Staff</class>
      <class>com.tutorialspoint.eclipselink.entity.NonTeachingStaff</class>
      <class>com.tutorialspoint.eclipselink.entity.TeachingStaff</class>
      
      <properties>
         <property name = "javax.persistence.jdbc.url" value = "jdbc:mysql://localhost:3306/jpadb"/>
         <property name = "javax.persistence.jdbc.user" value = "root"/>
         <property name = "javax.persistence.jdbc.password" value = "root"/>
         <property name = "javax.persistence.jdbc.driver" value = "com.mysql.jdbc.Driver"/>
         <property name = "eclipselink.logging.level" value = "FINE"/>
         <property name = "eclipselink.ddl-generation" value="create-tables"/>
      </properties>
      
   </persistence-unit>
</persistence>

ชั้นบริการ

คลาสบริการเป็นส่วนหนึ่งของการดำเนินการขององค์ประกอบทางธุรกิจ สร้างแพ็คเกจภายใต้‘src’ ชื่อแพ็คเกจ ‘com.tutorialspoint.eclipselink.service’.

สร้างคลาสชื่อ SaveClient.javaภายใต้แพ็คเกจที่กำหนดเพื่อจัดเก็บฟิลด์คลาส Staff, TeachingStaff และ NonTeachingStaff คลาส SaveClient แสดงดังนี้:

package com.tutorialspoint.eclipselink.service;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import com.tutorialspoint.eclipselink.entity.NonTeachingStaff;
import com.tutorialspoint.eclipselink.entity.TeachingStaff;

public class SaveClient {
   public static void main( String[ ] args ) {
      EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" );
      EntityManager entitymanager = emfactory.createEntityManager( );
      entitymanager.getTransaction( ).begin( );

      //Teaching staff entity 
      TeachingStaff ts1 = new TeachingStaff(1,"Gopal","MSc MEd","Maths");
      TeachingStaff ts2 = new TeachingStaff(2, "Manisha", "BSc BEd", "English");
      
      //Non-Teaching Staff entity
      NonTeachingStaff nts1 = new NonTeachingStaff(3, "Satish", "Accounts");
      NonTeachingStaff nts2 = new NonTeachingStaff(4, "Krishna", "Office Admin");

      //storing all entities
      entitymanager.persist(ts1);
      entitymanager.persist(ts2);
      entitymanager.persist(nts1);
      entitymanager.persist(nts2);

      entitymanager.getTransaction().commit();
      entitymanager.close();
      emfactory.close();
   }
}

หลังจากรวบรวมและดำเนินการโปรแกรมข้างต้นคุณจะได้รับการแจ้งเตือนในแผงคอนโซลของ Eclipse IDE สำหรับเอาต์พุตตรวจสอบ MySQL workbench ดังต่อไปนี้:

ที่นี่มีการสร้างตารางสามตารางและไฟล์ Staff ตารางมีระเบียนว่าง

ผลของ TeachingStaff ในรูปแบบตารางจะแสดงดังนี้:

ซิด คุณสมบัติ Sname เรื่องความเชี่ยวชาญ
1 MSC MED โกปาล คณิตศาสตร์
2 บีเอสซีเบด มานิชา ภาษาอังกฤษ

ตารางด้านบน TeachingStaff ประกอบด้วยฟิลด์ของทั้ง Staff และ TeachingStaff Entities

ผลของ NonTeachingStaff ในรูปแบบตารางจะแสดงดังนี้:

ซิด Areaexpertise Sname
3 บัญชี Satish
4 ผู้ดูแลระบบสำนักงาน กฤษณะ

ตารางด้านบน NonTeachingStaff ประกอบด้วยฟิลด์ของทั้ง Staff และ NonTeachingStaff Entities