Hibernate:JoinColumn中的referencedColumnName被忽略

时间:2013-06-25 11:31:59

标签: hibernate join mapping joincolumn

我有两个表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) ...

Bar.class:

@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进行此查询,并且无法更改数据库架构。

1 个答案:

答案 0 :(得分:0)

尝试使用您想要的sql查询作为代码的hql查询