2013-07-04 93 views
0

我有2個實體有一對多的關係:JPA HQL查詢與在上FK條件colums

@Entity 
public class Project { 

@Id 
@GeneratedValue(strategy=GenerationType.AUTO) 
private long id; 


@OneToMany(mappedBy="project",cascade=CascadeType.ALL) 
private java.util.List<RmtService> services = new ArrayList<RmtService>(); 

} 

和:

@javax.persistence.Entity 
public class Service implements Serializable{ 

@Id 
@GeneratedValue(strategy=GenerationType.AUTO) 
private long id; 

@ManyToOne 
    @JoinColumn(name = "project_id") 
private Project project; 

    // . . . 
} 

有一種方法做一個JPA查詢生成SQL查詢如:

select * from service where project_id=? 

??

我試過的所有查詢總是在Project表上生成一個連接。

我嘗試:

select s from Service s left join fetch s.project pp where pp.id = :id 

生成

select rmtservice0_.id as id1_1_0_, project1_.id as id1_0_1_, 
rmtservice0_.project_id as project3_1_0_, rmtservice0_.serviceType 
as serviceT2_1_0_, project1_.name as name2_0_1_, project1_.surname 
as surname3_0_1_ from RmtService rmtservice0_ 
left outer join Project project1_ on rmtservice0_.project_id=project1_.id 
where project1_.id=? 

select s from RmtService s where s.project.id = :id 

產生2個查詢:

select rmtservice0_.id as id1_1_, rmtservice0_.project_id as project3_1_, 
rmtservice0_.serviceType as serviceT2_1_ from RmtService rmtservice0_ where 
rmtservice0_.project_id=? 

select project0_.id as id1_0_0_, project0_.name as name2_0_0_, project0_.surname 
as surname3_0_0_ from Project project0_ where project0_.id=? 

非常感謝

+0

您試過什麼疑問? –

+0

在問題 – JayZee

回答

1
SELECT s FROM Service s 
WHERE s.project = :project 
+0

中更改內聯謝謝!實際上,即使這個版本解僱了2個查詢,因爲我沒有強迫@ManyToOne懶惰,當我改變它懶惰它工作正常。 – JayZee

+0

我的確認爲可能是這種情況。很高興我能幫上忙。 –