2014-04-01 53 views
0

我有这个查询在mysql中成功运行,但我试图将它写为JPA查询,并且不断收到错误。这是我的桌子。如何将此SQL查询写入JPA查询

Table 1: business_accounts{id, business_name} 
Table 2: work_locations{location_id, name, contractor_id } 
//contractor_id on Table2 is the foreign key matched to id on table 1. 

我的SQL查询是我想去的地方,从表1的id等于从表2和contractor_id返回BUSINESS_NAME的所有值,其中name =“都柏林”这是在MySQL的工作我的SQL查询:

SELECT b.business_name FROM work_locations w 
inner join business_accounts b on b.id=w.contractor_id where name="Carlow" 

这里是我在JPA中采取的方法,它不工作。任何建议表示赞赏。由于

String countyName="Dublin"; 

     Query myQuery2 = em.createQuery("SELECT b FROM business_accounts b join " 
       + "w where b.id=w.contractor_id and w.name=:countyName"); 

     myQuery2.setParameter("countyName", countyName); 

回答

0
  1. 您需要创建相应的表中正确的实体。 a。 Business_Account entity

b。 Work_Location是另一个

c。您可以选择为a之间的连接创建单独的连接表。和b。我会建议,但它是你的偏好。

基于a。和b。试一下这几行 -

String countyName="Dublin"; 
final TypedQuery<String> query = entityManager 
      .createQuery(
        "Select distinct b.business_name from Business_Account b, IN(b.id) location where b.id=location and location.name =:countyName", String.class); //$NON-NLS-1$ 
    query.setParameter("countyName", countyName); //$NON-NLS-1$ 
+0

感谢您的帮助 – kellzer

0

试试下面的代码:

  1. 使用createNativeQuery
  2. SELECT b.business_name替代的选择B
  3. 添加实体类与查询将返回类型。

    String QUERY = "SELECT b.business_name FROM business_accounts b join w where b.id=w.contractor_id and w.name=?)"; 
    
    List list = em.createNativeQuery(QUERY, ENTITY_CLASS_HERE.class) 
        .setParameter(1, countyName) 
        .getResultList();