1

のラッパーEJBように作成しました。このラッパーには、ビジネス ロジックと this の検証コモンズがあります。ラッパーCRUDに送信する方法を知りたい(ただし、ラッパーを .xml にしたくない) 。entitiesentity@Entity

何か案が???

4

1 に答える 1

1

EJB をラッパーとして使用するのではなく、エンティティをラップするという特定の目的を持つ他の Java クラスを使用することをお勧めします。

ラッパー クラスはエンティティをラップする必要があるため、1 対 1 の関連付けにする必要があります (jpa と混同しないでください。Java 関連付け / 構成を意味します)。したがって、基本的にはデコレータ パターンに従います。

次に、必要なすべてのメソッドを作成します。ラッピングするエンティティと同じメソッドを使用すると非常に役立ちます。次に、メソッド本体内で、ラップするエンティティ インスタンスの対応するメソッドを呼び出します。

,

@Entity
public class Person {

    @Column(name = "ID")
    private Long id;
    @Column(name = "FIRST_NAME")
    private String firstName;
    @Column(name = "LAST_NAME")
    private String lastName;

    public String getFirstName(){
      return this.firstName;
    }

    public void setFirstName(String firstName){
      this.firstName = firstName;
    }

    public String getLastName(){
      return this.lastName;
    }

    public void setLastName(String lastName){
     this.lastName = lastName;
    }
}

public class PersonWrapper{
  private Person person;
  private String someCalculatedField;
  public PersonWrapper(Person person){
    this.person = person;
  }

  public Person getPerson(){
    return this.person;
  }

  public void setPerson(Person person){
    this.person = person;
  }

  public String getFirstName(){
    /* possibly do transformations */
    return person.getFirstName();
  }

  public void setFirstName(String firstName){
    /* possibly do validations, transformations*/
    person.setFirstName(firstName);
  }

  public String getSomeCalculatedField(){
  /*do stuff with person or other entities as well and populate the calculated field,
    then return it
  */
    return this.someCalculatedField;
  }


}

明確ではないかもしれませんが、CRUD関数またはラッパーインスタンスのその他の操作を終了した後、jpaを介して変更を永続化するには、jpaエンティティを取得する必要があります(つまりperson、ラッパーのメソッドからgetPerson())呼び出しpersistmergeremoveまたはそのインスタンスに何でも。

編集

コメントに基づいて、ラッパーをエンティティから継承させることは、 Person person = new PersonWrapper(personEntity);たとえばPersonWrapper person = new PersonWrapper(personEntity);.

継承後でも、ラッパーのメソッド本体はラッパー自体ではなく、ラップされたインスタンスのコードを呼び出すため、ラッパーのメソッドをオーバーライドすることが必須です。メソッドをオーバーライドしないと、ラッパー自体で継承されたメソッドが呼び出されます。後者は 2 つの理由で間違いです。

1.データが間違ったインスタンスから保存/取得されます(ラップされたエンティティではなくラッパー)

2.データはエンティティではないため(jpa継承がないため)、jpa関数では使用できないため、ラッパーに保存しないでください。ラップされたインスタンスのみを使用できます。また、ラッパーは管理対象の jpa コンテキストから取得されたものではないため、永続性に関連するデータはありません。

于 2013-11-14T08:41:39.527 に答える