java - 複数 - manytoone joincolumn
無関係なエンティティをjpa api基準で結合する (2)
2つのデータベーステーブルには外部キーの関係があります。
それらはJPAによって2つのエンティティAとBにマッピングされますが、結合列はエンティティから手動で削除されるため、JPAの世界ではクラスAとBは関連しておらず、フィールド/プロパティを通して相互にナビゲートできません。
条件APIを使用すると、2つのテーブルを結合するクエリを作成することができますか?
私がインターネットで見つけたすべての例はゴールを達成するためにjoinカラムを使用します、しかし、上で述べたように、それはコードから取り除かれました。 。
まず、外部キーの関係はナビゲートだけではありません。 それらは主に、関係に偽の値が導入されないようにするのに役立ちます。 それらはまた、クエリ最適化のためにデータベースを助けるかもしれません。 私はあなたにそれを再考するように勧めます。
とにかく、いくつかの無関係なエンティティを使用するクエリを作成するには、それらをfrom
( root
)エンティティとして配置する必要があります(SQLまたはJPQLで行うように)
SELECT .... FROM Link l, Training t WHERE l.attribute = t.attribute;
Root<Link> rootLink = criteriaQuery.from(Link.class);
Root<Training> rootTraining = criteriaQuery.from(Training.class);
...
criteriaQuery.where(
criteriaBuilder.equal(rootLink.get(link_.linkAttribute), trainingLink));
関連のないエンティティへの参加は、最新のJPA仕様(2.1)ではカバーされていません。
ただし、Hibernate 5.1.0以降およびEclipseLink 2.4.0以降はアドホック結合をサポートしています。 http://blog.anthavio.net/2016/03/join-unrelated-entities-in-jpa.html
もう1つの可能性は、ネイティブクエリhttp://www.oracle.com/technetwork/articles/vasiliev-jpql-087123.html