検索

EJB3.0之实体Bean的继承_MySQL

Jun 01, 2016 pm 02:06 PM
importpublicstring実在物継承する

EJB

  在EJB3.0中,实体Bean可以实现继承关系。 比如有个Person的实体bean,它有姓名和性别两个属性。

  上帝和女娲造人的时候,造出两种人:Man和Woman。Man和Woman都是实体Bean,而且他们都继承Person。

  单一表策略就是副实体和子实体的数据都存放在一张表中,同时指定一列用来区别这些实体。

  如:

  @Entity
  @Inheritance(strategy = InheritanceType.SINGLE_TABLE, discriminatorType = DiscriminatorType.STRING)
  @DiscriminatorColumn(name = "P_TYPE", nullable = true)
  @ Inheritance的注释声明如下:
  @ @Target({TYPE}) @Retention(RUNTIME)

  public @interface Inheritance {
  InheritanceType strategy() default SINGLE_TABLE;
  DiscriminatorType discriminatorType() default STRING;
  String discriminatorValue() default "";
  }

  这个注释用来指定继承使用的策略,以及为了区别这些实体所用的列的类型与值。

  @DiscriminatorColumn注释用在单一表策略和联合表策略上。用来指定区别各实体所需的列。
  @Target({TYPE}) @Retention(RUNTIME)

  public @interface DiscriminatorColumn {
  String name() default "";
  boolean nullable() default false;
  String columnDefinition() default "";
  int length() default 10;
  }

  这个例子主要有以下几个文件,这个例子主要实现了Person和Man、Woman之间的继承关系,下面两章介绍的例子和这个例子相同。Man和Woman继承Person实体Bean。前面的例子一样,我们还是使用Client测试。

  Person.java:实体Bean。

  Man.java:实体Bean所依赖的类。

  Woman.java:实体Bean所依赖的类。

  PersonTest.java:会话Bean的业务接口

  PersonTestBean.java:会话Bean的实现类

  Client.java:测试EJB的客户端类。

  jndi.properties:jndi属性文件,提供访问jdni的基本配置属性。

  Build.xml:ant 配置文件,用以编译、发布、测试、清除EJB。

  下面针对每个文件的内容做一个介绍。

  Person.java

  package com.kuaff.ejb3.singleinheritance;

  import javax.ejb.DiscriminatorColumn;
  import javax.ejb.DiscriminatorType;
  import javax.ejb.Entity;
  import javax.ejb.GeneratorType;
  import javax.ejb.Id;
  import javax.ejb.Inheritance;
  import javax.ejb.InheritanceType;

  @Entity
  @Inheritance(strategy = InheritanceType.SINGLE_TABLE, discriminatorType = DiscriminatorType.STRING)
  @DiscriminatorColumn(name = "P_TYPE", nullable = true)
  public class Person implements java.io.Serializable
  {
  private int id;
  private String name;
  private String gender;

  @Id(generate = GeneratorType.AUTO)

  public int getId()
  {
  return id;
  }

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

  public String getName()
  {
  return name;
  }

  public void setName(String name)
  {
  this.name = name;
  }

  public void setGender(String gender)
  {
  this.gender = gender;
  }

  public String getGender()
  {
  return gender;
  }

  }

  指定使用P_TYPE列用来区别各实体Bean。

  Man.java

  package com.kuaff.ejb3.singleinheritance;

  import javax.ejb.DiscriminatorType;
  import javax.ejb.Entity;
  import javax.ejb.Inheritance;
  import javax.ejb.InheritanceType;

  @Entity
  @Inheritance(strategy = InheritanceType.SINGLE_TABLE, discriminatorType = DiscriminatorType.STRING, discriminatorValue = "Man")

  public class Man extends Person
  {
  private boolean isGood;
  public void setGood(boolean isGood)
  {
  this.isGood = isGood;
  }

  public boolean isGood()
  {
  return isGood;
  }
  }

  这个实体Bean增加了一个是否是好男人的属性。

  Woman.java

  package com.kuaff.ejb3.singleinheritance;

  import javax.ejb.DiscriminatorType;
  import javax.ejb.Entity;
  import javax.ejb.Inheritance;
  import javax.ejb.InheritanceType;

  @Entity
  @Inheritance(strategy = InheritanceType.SINGLE_TABLE, discriminatorType = DiscriminatorType.STRING, discriminatorValue = "Woman")

  public class Woman extends Person
  {
  private boolean isbeautiful;

  public void setIsbeautiful(boolean isbeautiful)
  {
  this.isbeautiful = isbeautiful;
  }

  public boolean isIsbeautiful()
  {
  return isbeautiful;
  }

  }

  EntityTest.java

  package com.kuaff.ejb3.singleinheritance;

  import javax.ejb.Remote;
  import java.util.List;

  @Remote

  public interface PersonDAO
  {
  public int createMan(String name,String gender,boolean b);
  public int createWoman(String name,String gender,boolean b);
  public Person find(int i);
  public List findByName(String name);
  public List findByInfo(String gender);
  }

  PersonTestBean.java

  package com.kuaff.ejb3.singleinheritance;

  import javax.ejb.EntityManager;
  import javax.ejb.Inject;
  import javax.ejb.Stateless;
  import java.util.List;

  @Stateless

  public class PersonDAOBean implements PersonDAO
  {
  @Inject
  private EntityManager manager;

  public int createMan(String name,String gender,boolean b)
  {
  Man man = new Man();
  man.setName(name);
  man.setGender(gender);
  man.setGood(b);
  manager.create(man);
  return man.getId();
  }

  public int createWoman(String name, String gender,boolean b)
  {
  Woman woman = new Woman();
  woman.setName(name);
  woman.setGender(gender);
  woman.setIsbeautiful(b);
  manager.create(woman);
  return woman.getId();
  }

  public Person find(int i)
  {
  return manager.find(Person.class,i);
  }

  public List findByName(String name)
  {
  return manager.createQuery("from Person p where p.name =:name").setParameter("name", name).listResults();
  }

  public List findByInfo(String gender)
  {
  return manager.createQuery("from Person p where p.gender =:gender").setParameter("gender", gender).listResults();
  }

  }

  在这个会话Bean中提供了创建Man、Woman实体Bean的方法,并提供了查找方法。

  Client.java

  package com.kuaff.ejb3.singleinheritance;

  import javax.naming.InitialContext;
  import javax.naming.NamingException;
  import java.util.List;

  public class Client
  {
  public static void main(String[] args) throws NamingException
  {
  InitialContext ctx = new InitialContext();
  PersonDAO dao = (PersonDAO) ctx.lookup(PersonDAO.class.getName());
  int i = dao.createMan("晁岳攀","男",true);
  dao.createWoman("朱立焕","女",true);
  Person p = dao.find(i);
  System.out.printf("%s的性别:%s%n",p.getName(),p.getGender());
  List list = dao.findByName("朱立焕");

  for (Object o:list)
  {
   Woman w = (Woman)o;
   System.out.printf("%s漂亮吗?结论:%b%n",w.getName(),w.isIsbeautiful());
  }
  }

  }

  这个客户端用来测试。

  请运行{$JBOSS_HOME}/bin目录下的run.bat: run

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
MySQL:初心者が習得するための必須スキルMySQL:初心者が習得するための必須スキルApr 18, 2025 am 12:24 AM

MySQLは、初心者がデータベーススキルを学ぶのに適しています。 1.MySQLサーバーとクライアントツールをインストールします。 2。selectなどの基本的なSQLクエリを理解します。 3。マスターデータ操作:テーブルを作成し、データを挿入、更新、削除します。 4.高度なスキルを学ぶ:サブクエリとウィンドウの関数。 5。デバッグと最適化:構文を確認し、インデックスを使用し、選択*を避け、制限を使用します。

MySQL:構造化データとリレーショナルデータベースMySQL:構造化データとリレーショナルデータベースApr 18, 2025 am 12:22 AM

MySQLは、テーブル構造とSQLクエリを介して構造化されたデータを効率的に管理し、外部キーを介してテーブル間関係を実装します。 1.テーブルを作成するときにデータ形式と入力を定義します。 2。外部キーを使用して、テーブル間の関係を確立します。 3。インデックス作成とクエリの最適化により、パフォーマンスを改善します。 4.データベースを定期的にバックアップおよび監視して、データのセキュリティとパフォーマンスの最適化を確保します。

MySQL:説明されている主要な機能と機能MySQL:説明されている主要な機能と機能Apr 18, 2025 am 12:17 AM

MySQLは、Web開発で広く使用されているオープンソースリレーショナルデータベース管理システムです。その重要な機能には、次のものが含まれます。1。さまざまなシナリオに適したInnodbやMyisamなどの複数のストレージエンジンをサポートします。 2。ロードバランスとデータバックアップを容易にするために、マスタースレーブレプリケーション機能を提供します。 3.クエリの最適化とインデックスの使用により、クエリ効率を改善します。

SQLの目的:MySQLデータベースとの対話SQLの目的:MySQLデータベースとの対話Apr 18, 2025 am 12:12 AM

SQLは、MySQLデータベースと対話して、データの追加、削除、変更、検査、データベース設計を実現するために使用されます。 1)SQLは、ステートメントの選択、挿入、更新、削除を介してデータ操作を実行します。 2)データベースの設計と管理に作成、変更、ドロップステートメントを使用します。 3)複雑なクエリとデータ分析は、ビジネス上の意思決定効率を改善するためにSQLを通じて実装されます。

初心者向けのMySQL:データベース管理を開始します初心者向けのMySQL:データベース管理を開始しますApr 18, 2025 am 12:10 AM

MySQLの基本操作には、データベース、テーブルの作成、およびSQLを使用してデータのCRUD操作を実行することが含まれます。 1.データベースの作成:createdatabasemy_first_db; 2。テーブルの作成:createTableBooks(idintauto_incrementprimarykey、titlevarchary(100)notnull、authorvarchar(100)notnull、published_yearint); 3.データの挿入:InsertIntoBooks(タイトル、著者、公開_year)VA

MySQLの役割:WebアプリケーションのデータベースMySQLの役割:WebアプリケーションのデータベースApr 17, 2025 am 12:23 AM

WebアプリケーションにおけるMySQLの主な役割は、データを保存および管理することです。 1.MYSQLは、ユーザー情報、製品カタログ、トランザクションレコード、その他のデータを効率的に処理します。 2。SQLクエリを介して、開発者はデータベースから情報を抽出して動的なコンテンツを生成できます。 3.MYSQLは、クライアントサーバーモデルに基づいて機能し、許容可能なクエリ速度を確保します。

MySQL:最初のデータベースを構築しますMySQL:最初のデータベースを構築しますApr 17, 2025 am 12:22 AM

MySQLデータベースを構築する手順には次のものがあります。1。データベースとテーブルの作成、2。データの挿入、および3。クエリを実行します。まず、createdAtabaseおよびcreateTableステートメントを使用してデータベースとテーブルを作成し、InsertINTOステートメントを使用してデータを挿入し、最後にSelectステートメントを使用してデータを照会します。

MySQL:データストレージに対する初心者向けのアプローチMySQL:データストレージに対する初心者向けのアプローチApr 17, 2025 am 12:21 AM

MySQLは、使いやすく強力であるため、初心者に適しています。 1.MYSQLはリレーショナルデータベースであり、CRUD操作にSQLを使用します。 2。インストールは簡単で、ルートユーザーのパスワードを構成する必要があります。 3.挿入、更新、削除、および選択してデータ操作を実行します。 4. Orderby、Where and Joinは複雑なクエリに使用できます。 5.デバッグでは、構文をチェックし、説明を使用してクエリを分析する必要があります。 6.最適化の提案には、インデックスの使用、適切なデータ型の選択、優れたプログラミング習慣が含まれます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。