Es-jpa-jpa-advanced-mappings

提供:Dev Guides
移動先:案内検索

JPA-Avanzadaの署名

JPAはJavaの参考文献です。 ロタント、ソポルタロスコンセプトスオリエンタドスアオブジェトスパララパーシスタンシアデラエンティダード。 ハスタ・アホラ、ヘモス・ターミナド・コン・ロス・ロス・コンポス・バシコス・デ・マペオ・レラシオナル・デ・オブジェブトス。 歴史的目的のための交通機関の交通機関

エレンテギアスデヘレンシア

ラ・ヘレンシア・エス・エル・コンセプト・デ・ラ・ベース・デ・クアルキエ・レンガヘ・オリエンタード・オブ・オブジェトス、ポル・ロ・タント、ポデモス・ユーティリザーズ・ラス・レラシオネス・デ・ヘレンシア・オ・エストレギアス・エントレ・ラス・エンティダーデス JPAは、エストニアのエストレージャに関するヒントを認めています:SINGLE_TABLE、JOINED_TABLE、TABLE_PER_CONCRETE_CLASS。

イエメンプロを考慮することはできません。 El siguiente diagrama muestra tres clases、es decir personal、TeachingStaff y NonTeachingStaff y sus relaciones。

エレンシア・エストラシア

前の図式、個人的、個人的、教育的TeachingStaff y NonTeachingStaff息子は個人的です。 ヴァイモス・ア・ユーティライザー・エ​​ル・イェメンプロ・アンティ・パラ・デモストラル・ロス・トレス・トレス・エスレートギアス・デ・ラ・ヘレンシア・デ。

Estrategia de mesaúnica

Mesaúnicaestrategia toma todos los campos de las clases(clases tanto super y sub)y mapa abajo en una sola tabla conocida como estrategia SINGLE_TABLE。 Aquíel valor discriminadordesempeñaun papel clave en diferenciar los valores de las tres entidades en una tabla。

検討前のエル・イェメンプロを許可しません。 TeachingStaff y NonTeachingStaff息子は個人的な副次的存在です。 ヘレンシアの概念、スーパークラスのサブクラス。 lo tanto sid y sname son los campos que pertenecen a ambos TeachingStaff y NonTeachingStaff。 JPAを作成します。 Todos losmódulosde este proyecto son los si guientes:

Creaciónde entidades

Creac un paquete denominado 'com.finddevguides.eclipselink.entity' bajo 'src' paquete。 Creave una nueva clase de java Staff.java bajo el nombre dado paquete。 La clase de entidad personal se muestra como sigue:

package com.finddevguides.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;
   }
}

En elcódigoanterior @ DescriminatorColumn は、フィールド名*(tipo) *y sus valores muestran el restante(Teaching and NonTeachingStaff)camposを指定します。

Crear una subclase(clase)a la clase de personal nombrado* TeachingStaff.java bajo el com.finddevguides.eclipselink.entity *paquete。 TeachingStaff se muestra como sigueのラクラス:

package com.finddevguides.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;
   }
}

Crear una subclase(clase)a la clase de personal nombrado* NonTeachingStaff.java bajo el com.finddevguides.eclipselink.entity *paquete。 NonTeachingStaff se muestra como sigueの全クラス:

package com.finddevguides.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は、すべての構成情報をベースに、すべての登録情報を登録します。 El Archivo xml se muestra como sigue:

<?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.finddevguides.eclipselink.entity.Staff</class>
      <class>com.finddevguides.eclipselink.entity.NonTeachingStaff</class>
      <class>com.finddevguides.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>

Clase de servicio

部品の実装に関する大使館法案。 Crear un paquete bajo* ‘src’ paquete denominado ‘com.finddevguides.eclipselink.service’ *。

Crear una clase denominada SaveClient.java bajo el paquete dado para almacenar campos clase personal、TeachingStaff y NonTeachingStaff。 SaveClient se muestra como sigue:

package com.finddevguides.eclipselink.service;

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

import com.finddevguides.eclipselink.entity.NonTeachingStaff;
import com.finddevguides.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のコンソーラパネルの事前通知プログラムに事前に対応したプログラムを作成します。 Comprobar MySQL workbench para la salida。 La salida en formato tabular se muestra como sigue:

Sid Type Sname Areaexpertise Qualification Subjectexpertise
1 TS Gopal MSC MED Maths
2 TS Manisha BSC BED English
3 NS Satish Accounts
4 NS Krishna Office Admin

最終候補者はコンソギラ・ウナ・ソラ・タブラ・ケ・コンティエン・エル・カンポ・デ・トダス・ラス・クラス・ド・トレス・コン・ウナ・コラムナ・デ・ディスミナドール・デノミナダ*ティポ*(カンポ)を使いました

ユニフィカダメサエストレジア

メサエストレジアエスコンパティルラコラムナケセハンスレフェレンシアクコンティエンヴァロレスニコスパラユニルセアラメサイヘーサートランスアクシオンファシリーズ。 アリババの考察。

JPAを作成します。 プロジェクトに参加する必要があります。

Creaciónde entidades

Crear un paquete denominado ‘com.finddevguides.eclipselink.entity’ bajo ‘src’ paquete。 Crear una nueva clase de java llamada Staff.java bajo dado paquete。 La clase de entidad personal se muestra como sigue:

package com.finddevguides.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;
   }
}

Crear una subclase(clase)a la clase de personal nombrado TeachingStaff.java bajo el com.finddevguides.eclipselink.entity paquete。 TeachingStaff se muestra como sigueのラクラス:

package com.finddevguides.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;
   }
}

Crear una subclase(clase)a la clase de personal nombrado NonTeachingStaff.java bajo el com.finddevguides.eclipselink.entity paquete。 NonTeachingStaff se muestra como sigueの全クラス:

package com.finddevguides.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構成の基本情報は、基本構成の基本情報と登録情報の基本情報です。 El Archivo xml se muestra como sigue:

<?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.finddevguides.eclipselink.entity.Staff</class>
   <class>com.finddevguides.eclipselink.entity.NonTeachingStaff</class>
   <class>com.finddevguides.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>

Clase de servicio

部品の実装に関する大使館法案。 Crear un paquete debajo del paquete 'src' llamado 'com.finddevguides.eclipselink.service'

Crease una clase denominada SaveClient.java bajo el paquete dado para almacenar campos de clase personal、TeachingStaff y NonTeachingStaff。 SaveClient como sigueの継続的な機能:

package com.finddevguides.eclipselink.service;

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

import com.finddevguides.eclipselink.entity.NonTeachingStaff;
import com.finddevguides.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のコンソーラパネルの事前通知プログラムに事前に対応したプログラムを作成します。 パララサリダ、verifique MySQLワークベンチ。

タブラとタブラの結果*個人用*ミュージカルとフォルムの表形式。

Sid Dtype Sname
1 TeachingStaff Gopal
2 TeachingStaff Manisha
3 NonTeachingStaff Satish
4 NonTeachingStaff Krishna

タブラの結果 TeachingStaff muestra como sigue:

Sid Qualification Subjectexpertise
1 MSC MED Maths
2 BSC BED English

タブラの前部の側面とカンブのフォームの個人用のタブラ NonTeachingStaff の結果の表示

Sid Areaexpertise
3 Accounts
4 Office Admin

ファイナルメンテ、ラストレスタブラスセクレアンウティリザンドサスリスペリヴォスカンポスイエルカンポデエスデコンパートドポルトダスラストレスタブラス。 En el cuadro de personal、SID es la claveプリンシパル。 タブラス(TeachingStaff y NonTeachingStaff)を再利用します。SIDes la claveforánea。

Mesa por estrategia de clase

Tabla por estrategia de clase es crear una tabla para cada entidad sub。 セクレアララタブラパーソナル、ペロコンテンドラヴァロアヌル ロス・バロレス・デル・カンポ・デ・ラ・タブラ・デル・パーソナル・デベン・サー・コンパチドス・ポル・ラス・タブラス・デ・ロス

バモスは思慮深いエル・ミスモ・イェメンプロ・クェク・エル・エル・アンテリアです。

Creaciónde entidades

Crear un paquete denominado ‘com.finddevguides.eclipselink.entity’ bajo ‘src’ paquete。 Crear una nueva clase de java llamada Staff.java bajo dado paquete。 La clase de entidad personal se muestra como sigue:

package com.finddevguides.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;
   }
}

Crear una subclase(clase)a la clase de personal nombrado TeachingStaff.java bajo el com.finddevguides.eclipselink.entity paquete。 TeachingStaff se muestra como sigueのラクラス:

package com.finddevguides.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;
   }
}

Crear una subclase(clase)a la clase de personal nombra NonTeachingStaff.java bajo el com.finddevguides.eclipselink.entity paquete。 NonTeachingStaff se muestra como sigueの全クラス:

package com.finddevguides.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構成の構成情報は、基本情報の基本情報と登録情報のすべての情報を提供します。 El Archivo xml se muestra como sigue:

<?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.finddevguides.eclipselink.entity.Staff</class>
   <class>com.finddevguides.eclipselink.entity.NonTeachingStaff</class>
   <class>com.finddevguides.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>

Clase de servicio

部品の実装に関する大使館法案。 Crear un paquete bajo ‘src’ paquete denominado ‘com.finddevguides.eclipselink.service’

Crear una clase denominada SaveClient.java bajo el paquete dado para almacenar campos clase personal、TeachingStaff y NonTeachingStaff。 SaveClient se muestra como sigue:

package com.finddevguides.eclipselink.service;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.finddevguides.eclipselink.entity.NonTeachingStaff;
import com.finddevguides.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ワークベンチを含む。

Aquíse crean las tres tablas y el Personal tabla contiene registros nulos。

*TeachingStaff* による視覚化されたドキュメントの管理:
Sid Qualification Sname Subjectexpertise
1 MSC MED Gopal Maths
2 BSC BED Manisha English

La tabla TeachingStaffは、個人的なy de las entidades campingsを構成します。

*NonTeachingStaff* の結果の視覚化の方法:
Sid Areaexpertise Sname
3 Accounts Satish
4 Office Admin Krishna

タブラNonTeachingStaffは、NonTeachingStaffの機能を備えたカンポスです。