2016-07-15 123 views
0

在使用HQL从Oracle数据库中提取实体时遇到一些问题。HQL错误“无法解析属性”

这里是我的DAO

public ClientProject getClientProject(Client client, Product product) { 
    ClientProject clientProject = null; 
    Session session = factory.openSession(); 
    String name = client.getClientName(); 
    String id = "" + product.getProductId(); 
    String hql= "from ClientProject as cp where cp.client.name = :name and cp.product.id = :id"; 
    try { 
     session.beginTransaction(); 
     Query query = session.createQuery(hql); 
     query.setParameter("name", "%"+name+"%"); 
     query.setParameter("id", "%"+id+"%"); 

    } finally { 
     session.close(); 
    } 

    return clientProject; 
} 

下面的代码为ClientProject

@Entity 
@Table (name="client_project") 
@SequenceGenerator(name="seq_client_project",sequenceName="****.SEQ_CLIENT_PROJECT", allocationSize=1, initialValue=1) 
public class ClientProject { 

//Fields 
@Id 
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq_client_project") 
@Column(name="CLIENT_PROJECT_ID") 
private int id; 
@ManyToOne(fetch=FetchType.EAGER) 
@JoinColumn(name="client_id") 
private Client client; 
@OneToOne(cascade=CascadeType.ALL) 
@JoinColumn(name="product_id") 
private Product product; 
@OneToMany(mappedBy="clientProject") 
private Set<Mod> clientProjectMod; 
@Column(name="PROJECT_CODE") 
private String projectCode; 

下面的代码是客户端类

@Entity 
@Table (name="client") 
@SequenceGenerator(name="seq_client",sequenceName="****.SEQ_CLIENT", allocationSize=1, initialValue=1) 
public class Client { 

//Fields 
@Id 
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq_client") 
@Column(name="CLIENT_ID") 
private int id; 
@Column(name="CLIENT_NAME") 
private String clientName; 
@Column(name="CLIENT_CODE") 
private String clientCode; 
@OneToMany(mappedBy="client") 
private Set<ClientProject> clientProjects; 

代码这里是错误信息我越来越..

WARNING: #{newBean.handleGenerateForm}: org.hibernate.QueryException: could not resolve property: name of: com.manh.entries.Client [from com.manh.entries.ClientProject as cp where cp.client.name = :name and cp.product.id = :id] javax.faces.FacesException: #{newBean.handleGenerateForm}: org.hibernate.QueryException: could not resolve property: name of: com.manh.entries.Client [from com.manh.entries.ClientProject as cp where cp.client.name = :name and cp.product.id = :id] 

任何想法?我猜我只是搞砸了部分HQL查询...

在此先感谢!

+0

安置自己的'ClientProject'和'Client'类 – Reimeus

+0

我想你需要一个'alias' – Apostolos

+0

@Reimeus我加入了请求的代码 – AHijaouy

回答

1

属性名称是clientNamename

String hql= "from ClientProject as cp where cp.client.clientName = :name and cp.product.id = :id"; 
+0

这是一个大发现!代码仍然没有从查询中返回任何内容。有什么想法吗? – AHijaouy

+0

您正在使用'%'通配符。在查询中使用'like'而不是'='或者不要使用这些字符 – Reimeus

相关问题