0

以下のような AbstractEntity を継承するいくつかのエンティティがあります。

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class AbstractEntity implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue
    private int id;

    @Column(insertable = false, updatable = false)
    private String dtype;

    public String getDtype() {
        return dtype;
    }
}

次に、AbstractEntity を拡張するエンティティを永続化します。

ConcreteEntity concreteEntity = new ConcreteEntity();
em.persist(concreteEntity);

次に、他の ejb でこのエンティティを取得する場合

someEntity = query.getResultList().get(0);        

返されたインスタンスはdtype == nullまであります

em.refresh(someEntity);

これは、エンティティ マネージャーが em.persist() に挿入された dtype を認識しないキャッシュされたインスタンスを返すためだと思います。

しかし、私の質問は、dtype が設定されているクエリを返すインスタンスをどのように取得できるかということです。

私はglassfish 3.1.2.2を使用しています(デフォルトのjpaプロバイダーと含まれているjavadb)

4

1 に答える 1

1

なぜあなたもそれが必要なのですか?dtypeORMに必要な内部実装の詳細です。Javaタイプを使用して、サブクラスを区別することができます。たとえば、Faceletsコンテキストでは、次のことを試すことができます.getClass().getSimpleName()

#{entity.class.simpleName == 'ConcreteEntity'}

完全にクリーンではありませんが、機能します。

于 2013-02-02T20:34:52.897 に答える