您好,我正在尝试将此写到哪里并获取查询,但出现错误
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;
有什么想法吗?
最佳答案
join 应该在 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();
关于java - 如何正确编写 HQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18977504/