2011-01-19 13 views
3

私は約この構造JPA2:特定のテーブル行のみをエンティティにマッピングする方法

ID, name, purpose, rubbish... 
1, foo, PRICING, ... 
2, bar, INVENTORY, ... 
3, bar, PRICING, ... 

エンティティへの目的=価格設定とラインだけをマッピングするための好ましい方法は何で変更することはできませんテーブルを持っていますか? JPAアノテーションでこれを行う方法はありますか、またはビューが必要ですか?

答えて

4

あなたはSINGLE_TABLE継承戦略を使用しており、このような識別カラムとして「目的」を使用する可能性があります:私が正しくあなたの質問を理解していれば

@Entity 
@Table(name="THE_TABLE") 
@Inheritance(strategy=SINGLE_TABLE) 
@DiscriminatorColumn(name="purpose", discriminatorType=STRING) 
@DiscriminatorValue("PRICING") 
public class Pricing{ ... } 
+0

1を、それだけでは動作しません@ MappedSuperclassの親ですか? –

+0

これはうまくいくはずです。私はDiscriminatorValue API javadocのコード例を取った:http://download.oracle.com/javaee/5/api/javax/persistence/DiscriminatorValue.html – adrianboimvaser

+0

ありがとう、それは私が欲しいもののように見える。 – Landei

0

純粋なJPAがこれをサポートしているとは思いません。

Hibernateを使用している場合は、フィルタを使用できます。良い例はhereです。

これは、ベンダー固有の拡張機能を使用すると便利ですが、1つの実装に固定する1つの例です。他の実装(OpenJPA、EclipseLink ...)もこれをサポートする可能性がありますが、私はそれらをまだ見ていません。

0

、あなたが目的=価格のみ選択行しようとしています。

(1)エンティティを作成します。(2)クエリを作成します。 エンティティは、注釈を使用して、このようになります

@Entity 
public class Foo 
    { 
    String name; 
    String inventory; 
    .... 
    }  

その後、あなたは、単に構築し、実行したクエリを:アイデア

..... 
    @PersistenceContext 
EntityManager entityManager; 

..... 
public List<Foo> getAllWithPricing() 
{ 
    return entityManager.createQuery("select o from Foo o where o.purpose='PRICING'", Foo.class).getResultList() 

} 
+0

私は**特定のエンティティを**選択する方法を知っていますが、この場合、「非価格」のエンティティをまったく作成しないようにしたいと考えています。誰かが誤ってこれらのうちの1つを作成すると、システム内に邪魔をする可能性があります。 – Landei

関連する問題