2013-07-04 2 views
0

У меня есть 2 сущностей с onetomany отношений: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

изменен inline в вопросе – JayZee

ответ

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

большое спасибо! на самом деле даже эта версия выпустила 2 запроса, потому что я не заставлял @ManyToOne быть ленивым, когда я изменил его на ленивый, он работал нормально. – JayZee

+0

Я действительно думал, что может быть так. Рад, что я мог бы помочь. –