2017-04-27 10 views
1

私は左外部結合を内部結合に変換するタスクを持っています。私は休止状態で働いた。 私は実体があります休止中の内部結合

@Entity 
@Table("entity1") 
public Entity1{ 
@Id 
private Integer id; 

@ManyToOne(fetch = FetchType.EAGER) 
private Entity2 field; 
} 

@Entity 
@Table("entity2") 
public class Entity2{ 

@Id 
private String name; 

@ManyToOne(fetch = FetchType.EAGER) 
@JoinTable(name = "entity3_entity2", 
      joinColumns = @JoinColumn(name="entity2_name") 
      inverseJoinColumns = @JoinColumn(name = "entity3_name")) 
private Entity3 field; 
} 

@Entity 
@Table("entity3") 
public class Entity3{ 

@Id 
private String name; 

@OneToMany 
private Set<Entity2> field; 
} 

を私はHQL持っている:

select ... from entity1 inner join entity2 on ... left outer join entity3_entity2 on ... 

しかし、私は、内側には任意のSQLクエリせずに参加してentity3のレコードを取得する必要があります。

SELECT e1 FROM Entity1 e1 inner join fetch e1.field e2 inner join fetch e2.field where e1.id = ?1 

結果SQLです。それを行う方法はありますか?

+0

ねえアレクセイは、あなたがこのシナリオで重複行を取得していますか? – PSabuwala

答えて

0

hibernateで内部結合を使用してレコードをフェッチするには、次のクエリを使用できます。

<query name="findEntities"> 
    <query-param name="id" type="long" /> //pass id to here 
    SELECT e1 FROM Entity1 e1 
     inner join fetch e1.field e2 
     inner join fetch e2.field e3 
    where e1 = :id 
</query> 

それとも

@Query("SELECT e1 FROM Entity1 e1 inner join fetch e1.field e2 inner join fetch e2.field e3 where e1 = ?1") 
+0

私はすでにこのクエリを試してみました。しかし、結果のSQLは:select ... from entity1内部結合entity2 on ... left外部join entity3_entity2 on ...内部join entity3 on .... –