我这里有两个休眠实体注释:如何使这个select *从两个连接表中查询HQL形式?
@Entity
@Table(name = "CLIENT")
public class Client {
private Long pkClient;
private String name;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="PK_CLIENT")
public Long getPkClient() {
return pkClient;
}
public void setPkClient(Long pkClient) {
this.pkClient = pkClient;
}
@Column(name="NAME")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
...
}
@Entity
@Table(name="ACCOUNT")
public class Account {
private Long pkClientAccount;
private Long fkClient;
private String accountNo;
@Id
@Column(name="PK_CLIENT_ACCOUNT")
@GeneratedValue(strategy=GenerationType.AUTO)
public Long getPkClientAccount() {
return pkClientAccount;
}
public void setPkClientAccount(Long pkClientAccount) {
this.pkClientAccount = pkClientAccount;
}
@Column(name="FK_CLIENT")
public Long getFkClient() {
return fkClient;
}
public void setFkClient(Long fkClient) {
this.fkClient = fkClient;
}
@Column(name="ACCOUNT_NO")
public String getAccountNo() {
return accountNo;
}
public void setAccountNo(String accountNo) {
this.accountNo = accountNo;
}
...
}
的关系是一对其中许多客户端有很多账户。表ACCOUNT具有到客户端主键(PK_CLIENT)的外键(FK_CLIENT)。
我想在HQL的形式执行此查询:
select * from ACCOUNT a inner join CLIENT b on a.FK_CLIENT = b.PK_CLIENT
这意味着,从客户和用户实体的所有属性将被选中。
任何人都知道如何使用HQL形式进行查询?
AFAIK,在HQL中我们只能选择一个实体。
注:
我不能使用@ManyToOne映射帐户实体,因为已经有fkClient财产,这是因为GET/setFkClient已经用在别的地方我不能改变。
上述代码已通过删除无关部分以简化阅读而得到简化。如果您发现错字,请在评论部分让我知道,因为我手动键入了代码。
如果你不能做一个映射告诉Hibernate,这两个是相关的,则Hibernate也帮不了你。您必须首先选择您的“Account”对象,然后从它们中创建一个'Client' ID,并进行另一次选择。无论如何,这不是hibernate的工作原理,请阅读[简单关系](http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/mapping.html)。你的'Account'需要引用一个'Client' _object_,**而不是**外键。然后从数据库填充该对象引用是hibernate的工作。 – 2013-03-28 08:32:47
呵呵,所以用hibernate完全没有解决方案?我不能添加映射而不破坏其他代码。 – null 2013-03-28 08:43:06