我有两个表 FOO(包含对 BAR 中条目的引用)和 BAR 映射如下:
Foo.class:
@Id
@Column(name="ID", unique=true, nullable=false)
public BigDecimal getId() {
return id;
}
@Column(name="BARREF", unique=true, nullable=false)
public String getBarRef() {
return this.barRef;
}
@OneToOne(mappedBy="foo") //Inverse of the relationship
public Foo getFoo() {
return this.foo;
}
... + other columns (including other mapped classes) ...
酒吧类:
@OneToOne(fetch=FetchType.LAZY)
@JoinColumn(name="REF", updatable=false, insertable=false, referencedColumnName="BARREF") //Owner of the relationship
public Foo getFoo() {
return this.foo;
}
@Column(name="NAME")
public String getName() {
return this.name;
}
... + other columns ...
执行 HQL 时:
select bar.name from Foo foo left outer join Bar bar
生成的sql是
select bar.NAME from FOO foo left outer join BAR bar on foo.ID = bar.REF
当我在寻找 SQL 时:
select bar.NAME from FOO foo left outer join BAR bar on foo.BARREF = bar.REF
是否有原因为什么 referencedColumnName 似乎被忽略了(因此使用了默认的 PK)。它是否必须引用 ID 列?
这是唯一一个不按 ID 列映射的表,我尝试将 ID 和 BARREF 作为 ID 列,但出现错误:“列数错误。应该是 2'
由于 Criteria 的限制,我必须为此查询使用 HQL,并且无法更改数据库架构。