2012-01-22 25 views
16

で動作するようにどのように私は、私は、Java EEにかなり新しいだということを、私はまだJavaで強力な理論的背景を持っていないことを言ってから始める必要があります。インタフェースおよびJPA

私はJavaでinterfacesとともにJPAの使用方法を把握し、トラブルを抱えています。私が何を見つけるのかを説明するために、私は非常に簡単な例を作りました。

私は2つのシンプルなインターフェースPersonPetしている場合:私は適切に処理するにはどうすればよい

@Entity 
public class PersonEntity implements Person 
{ 
    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private Long id; 

    private PetEntity pet; 

    @Override 
    public void setPet(Pet pet) 
    { 
     /* How do i solve this? */ 
    } 
} 

@Entity 
public class PetEntity implements Pet 
{ 
    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private Long id; 

    private String name; 

    /* Getters and Setters omitted */ 

} 

public interface Person 
{ 
    public Pet getPet(); 
    public void setPet(Pet pet); 
} 

public interface Pet 
{ 
    public String getName(); 
} 

そしてPersonを実装エンティティPersonEntityなどPet実装PetEntityを上記の2つのエンティティ間の関係を維持したいと思っているsetPetメソッドのケース?

私はパブリック・インタフェースにモジュール/層の間の依存関係を維持したいので、私はインターフェイスを使用する主な理由です。どうすれば他の人に依存するのを避けることができますか?私のManagedBeanをEntityに直接渡しますか?誰かが実体上のインターフェイスを使用しないことをお勧めします場合は

、その後、代替の方法やパターンがあるかを説明してください。

答えて

17

あなたは関係注釈にtargetEntityプロパティを使用することができます。

@Entity 
public class PersonEntity implements Person { 
    private Long id; 

    private Pet pet; 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    public Long getId() { 
     return id; 
    } 

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

    @Override 
    @OneToOne(targetEntity = PetEntity.class) 
    public Pet getPet() { 
     return pet; 
    }   

    public void setPet(Pet pet) { 
     this.pet = pet; 
    } 
} 
+1

あなたはそれが動作しますか?暗黙のフィールドアクセスを使用していますが、セッターに '@ OneToOne'アノテーションを設定しています。さらに、プロパティへのアクセスがあっても、このアノテーションは機能しますか?セッターではなくゲッターでなければならない? –

+1

Mairbek、フィールドnaプロパティへのアクセスはどうしたらいいですか?この場合、JPA 2.0仕様のこの部分が関連していると思いますか?*「アクセス注釈を明示的に指定しなくても、エンティティ階層内のフィールドとプロパティに注釈の配置を混在させるアプリケーションの動作は未定義です。 –

+1

もちろん、Personの実装が1つしかない限り動作します。 1より大きい値を持つときは、インタフェースフィールドの実装で明示的なサポートが必要です – user383680

関連する問題