如何在 hql 中选择连接列
Posted
技术标签:
【中文标题】如何在 hql 中选择连接列【英文标题】:How to select join column in hql 【发布时间】:2014-11-13 12:23:51 【问题描述】:我正在使用 hibernate 并且有三个表:Version、Location 和 Arc。
版本 bean 是:
@Entity
@Table(name = "version")
public class Version
private String id;
private List<Location> locations = new ArrayList<Location>();
private List<Arc> arcs = new ArrayList<Arc>();
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "versionid", nullable = false)
public List<Location> getLocations()
return locations;
public void setLocations(List<Location> locations)
this.locations = locations;
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "versionid", nullable = false)
public List<Arc> getArcs()
return arcs;
public void setArcs(List<Arc> arcs)
this.arcs = arcs;
//other setters and getters
...
位置 bean 是:
@Entity
@Table(name = "location")
public class Location
private int id;
private String locationId;
//other getters and setters
...
Arc bean 是:
@Entity
@Table(name = "arc")
public class Arc
private int id;
//other setters and getters
...
现在我正在尝试使用 hql 访问数据。我可以这样查询:
select v.id,l.locationId from Version v, Location l where versionid=v.id;
但是当我这样做时,我得到了错误could not resolve property: versionid
:
select v.id,l.locationId from Version v, Location l where l.versionid=v.id;
当我这样做时,我也会收到此错误ambiguous versionid
:
select a.id, l.locationId from Arc a, Location l where versionid = '1';
我的问题是如何使用 hql 获取 Location 或 Arc 表中的连接列 versionid 以及如何区分两个具有相同名称的连接列 versionid? 有任何想法吗? 非常感谢。
有人建议我应该在位置表中添加 versionId。但是,如果我这样做,我会得到重复列的错误,因为连接列已经自动创建了一个 versionid 列。
【问题讨论】:
不应该是v.id = versionid
吗?另外,您的 versionid 在代码中的什么位置?在“版本”表中声明了locationId
。但没有versionid
。
locationId在location表中,versionid是Version中声明的join列。
【参考方案1】:
您的versionid
在代码中的什么位置?我的意思是声明。在“版本”表中声明了locationId
。但没有versionid
。检查你的查询你说的地方
`select v.id, l.locationId from Version v`
事实上,您的错误是“无法解析属性 versionid”。因为你一开始没有声明属性 versionid。
【讨论】:
实际上我不能在位置表中添加versionId,因为它会导致重复列以上是关于如何在 hql 中选择连接列的主要内容,如果未能解决你的问题,请参考以下文章
如何使用“构造函数”在“选择子句”中为多个表的选定列编写HQL JOIN查询
如何使用 HQL 在 OneToMany 映射中查找列的最大值?
如何在 Hql 中执行 ThenFetch 以及如何分解 nhibernate linq 中的许多连接?