2017-06-14 9 views
1

私はJPAを使用しており、アクセスしたいビューがあります。同様の要件を持つテーブルにアクセスするために、多くの他のクラスに埋め込みIDを持つマップされたエンティティを使用しています。ただし、idを構成するビューにヌルがある場合は常に、オブジェクト全体がnullとして返されます。私がクエリするときに返されるエンティティの数は正しいですが、それらはnullです。ここで JPAを使用して一意のIDを持たないビューにアクセスするとnullが返されます

はクラスです:私はゲッターとセッターとハッシュコードのようなものを省い

{ 
@Entity 
@Table(name = "VW_PRODUCT") 
public class VwProduct implements Serializable { 
    @EmbeddedId 
    private VwProductId id; 

    public VwProduct() { 
    } 
} 

{ 
@Embeddable 
public class VwProductId implements java.io.Serializable { 

    @Column(name = "PROD_NAME", nullable=true) 
    private String prodName; 
    @Column(name = "PROD_CTGRY", nullable=true) 
    private String prodCtgry; 
    @Column(name = "PROD_SBCTGRY", nullable=true) 
    private String prodSbctgry; 
} 

しかし、私は私の質問は明らかだと思います。その値の一部がnullの場合、このビューにどのようにアクセスすればよいですか? ありがとうございました!

答えて

1

nullを持つ主キー列があり、その列を検索すると常にオブジェクトが返されません。

私が知っている可能性のある解決策は3つあります。複雑さと優越性の順です。 (読み取り専用のビューで作業していない人は、次のいずれかの操作を行わないでください)非常に大きなショットガンで足を吹き飛ばすでしょう。

最も簡単な答えは、ビューの定義を変更し、 ROWIDまたは生成されたシリアルのようなものを作成し、それを主キーにします。

二答え、これは特定の両方の実装であり、具体的な休止状態、@ID @ROWID String id;

最後の答えの主キーを持つことであるが、より複雑である、「NullableStringにあなたの分野の3つのすべてをマッピングすることです"UserTypenullを「null」などの何かにマップするnullSafeGetがあります。重複を取得しますが、これは読み取り専用のビューなので、気にする必要はありません。

+0

この回答をいただきありがとうございます。私はこの問題に直面したことを実感したときに実際に最初のオプションを実行し、どのように修正したかを調べました。他の2つのオプションは、興味深いアイデアのように聞こえるかもしれません。再度、感謝します! –

関連する問題