一方向の OneToOne 関係を持つ 2 つのクラスがあります。
@Entity
@Table(name = "TypeA")
public class TypeA implements A
{
...
}
@Entity
@Table(name = "OTHER")
public class Other
{
@OneToOne
private A a;
.....
}
これらのクラスを保存すると、すべて正常に動作します。ここで、既存の A に基づいて Other を取得したいと思います。基本的に「SELECT * FROM OTHERE WHERE a = :a」と言う CriteriaQuery を作成しました。しかし、タイプ A のオブジェクトをクエリに設定すると、失敗します。データベースを調べると、OTHER.A フィールドは実際には値が「typeA:123」の varchar であることがわかります (ここで、123 は A オブジェクトの ID です)。残念ながら、ここでは双方向マッピングを使用できません。
final CriteriaBuilder cb = em.getCriteriaBuilder();
final CriteriaQuery<Other> cq = criteriaBuilder.createQuery(Other.class);
final Root<Other> root = cq.from(Other.class);
cq.where(cb.equal(root.get(Other_.a), myActualAObject));
final TypedQuery<Other> tq = em.createQuery(cq);
final Other other = tq.getSingleResult();
上記のクエリを実行する方法はありますか?
前もって感謝します。
乾杯フィリップ