以下のような 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)