【发布时间】:2014-09-03 22:14:12
【问题描述】:
我的 PostgreSQL 数据库中有两个表:
CREATE TABLE tableOne (id int, name varchar(10), address varchar(20))
CREATE TABLE tableTwo (id int, info text, addresses varchar(20)[])
现在我想创建一个连接如下:
SELECT * FROM tableOne JOIN tableTwo ON address = ANY(addresses)
我尝试使用 Hibernate - 类 TableOne 来实现这一点:
@Entity
@Table(name = "tableOne")
class TableOne {
private int id;
private TableTwo tableTwo;
private String address;
@Id
@Column(name = "id")
public getId() { return id; }
@ManyToOne
@JoinFormula(value = "address = any(tableTwo.addresses)",
referencedColumnName = "addresses")
public TableTwo getTableTwo(){
return tableTwo;
}
// Setters follow here
}
但 Hibernate 不断生成带有无意义 JOIN 子句的查询,例如:
... JOIN tableTwo ON _this.address = any(tableTwo.addresses) = tableTwo.addresses
我如何告诉 Hibernate 使用注释来正确格式化我的连接查询?不幸的是,我们的项目必须仅限于 Criteria API。
编辑:
根据下面 cmets 中 ashokhein 的建议,我只用 @ManyToOne 注释了方法 getTableTwo() - 现在我想使用 Criteria API 进行连接,大概使用 createAlias(associationPath,alias,joinType,withClause) 方法,其中 withClause 将是我在连接中的ON 子句。
但我不确定将什么作为 associationPath 和 alias 参数。
有什么提示吗?
【问题讨论】:
-
不要在实体类中创建查询。不应允许自定义查询。
-
你的意思是创建一个原生查询?
-
可以使用NamedQuery,HSQL,Criteria
-
那么如何注释
getTableTwo方法呢? -
另一个很好的例子,说明当您需要一些可以用 SQL 完成并且超越 ORM 的东西时,Hibernate 如何变得非常烦人......谢谢! :-)
标签: java sql hibernate postgresql join