1

嗨,我正在尝试在哪里写这个并获取查询,但出现错误

 Query query = session.createQuery("from Device d where d.customerRefId=:customerId " +
                    "left join fetch d.tradeInOldDevice ");                    
  query.setParameter("customerId", "myId");  
 Set<Device> customerDevices= (Set<Device>) query.list();

错误:

2013-09-24 12:18:45,753 ERROR PARSER:56 - line 1:98: unexpected token: left

那是设备实体:

@Entity
@Table(name = "Devices")
public class Device implements Serializable, IHidingDeletable {

...

  @ManyToOne(optional = true,fetch=FetchType.LAZY)
    private Customer owningCompany

 @OneToOne(fetch=FetchType.LAZY)
    @JoinColumn(name = "tradeInOldDevice")
    @Cascade(CascadeType.ALL)
    private Device tradeInOldDevice;

..

那是客户:

public class Customer extends AbstractCustomer {...}


@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@Table(name = "Customers")
@DiscriminatorColumn(name = "type")
public abstract class AbstractCustomer implements IVersionized, Serializable {

   @Id
    protected String customerRefId;

任何想法?

4

1 回答 1

3

连接应该在 where 子句之前:

    Query query = session.createQuery("from Device d left join " + 
    "fetch d.tradeInOldDevice od where d.customer.customerRefId=:customerId");

    query.setParameter("customerId", "myId");
    Set<Device> customerDevices= (Set<Device>) query.list();  
于 2013-09-24T09:23:39.530 回答