hibernate可选联接-需要以任意一种方式返回联接列值

hibernate可选联接-需要以任意一种方式返回联接列值,hibernate,Hibernate,从 系统中的许多现有查询依赖于EntityOne和EntityTwo之间的映射关系,更改此关系不是一个附加选项,但是我现在需要开始在tbl\u one.two\u id中存储和检索连接表中不存在的值。在输入的过程中,这可以很好地使用以下映射: @Entity @Table(name="tbl_one") public class EntityOne { .... @ManyToOne @NotFound(action = NotFoundAction.IGNORE)

系统中的许多现有查询依赖于EntityOne和EntityTwo之间的映射关系,更改此关系不是一个附加选项,但是我现在需要开始在
tbl\u one.two\u id
中存储和检索连接表中不存在的值。在输入的过程中,这可以很好地使用以下映射:

@Entity
@Table(name="tbl_one")
public class EntityOne
{
    ....
    @ManyToOne
    @NotFound(action = NotFoundAction.IGNORE)
    @JoinColumn(name = "two_id")
    private EntityTwo two;
    ....
}
。。但是,在查询时,如果结果的
two\u id
值在联接表中不存在,则字段
two
的值为空,我无法告诉
tbl\u one.two\u id
的值实际上是什么。我希望hibernate能够创建一个虚拟的
EntityTwo
对象,并仅在关系不存在时填充它的id字段

我还尝试将
two\u id
映射到另一个没有连接的字段:

@Entity
@Table(name="tbl_one")
public class EntityOne
{
    ....
    @ManyToOne
    @NotFound(action = NotFoundAction.IGNORE)
    @JoinColumn(name = "two_id", insertable = false, updatable = false)
    private EntityTwo two;

    @Column(name = "two_id")
    private String twoId;
    ....
}
。。。但是,即使存在相应的记录,
two
字段也不会填充

本质上,我需要某种方法来插入/更新
tbl\u one.two id的值,并检索
EntityTwo
的关联实体(如果存在关系),或者如果不存在关系,则只检索
tbl\u one.two id的值

我希望能够在不为同一个表创建两个映射的情况下解决这个问题

谢谢

编辑:更多信息

public class EntityTwo
{
    ...
    @Id
    @Column(name = "site_id")
    private String id;
    ...
}
这应该起作用:

@ManyToOne
@NotFound(action = NotFoundAction.IGNORE)
@JoinColumn(name = "two_id", insertable = false, updatable = false)
private EntityTwo two;

@Formula("two_id")
private String twoId;
Hibernate将选择two_id列两次:一次填充two关系,一次填充twoId。不过,twoId属性是只读的

您也可以做相反的操作,但这两个属性将变为只读:

@ManyToOne
@NotFound(action = NotFoundAction.IGNORE)
@JoinFormula("two_id")
private EntityTwo two;

@Column("two_id")
private String twoId;

使用您的JoinFormula,例如,我得到了
org.postgresql.util.PSQLException:错误:当查询时,该列的\u.two\u-two\u id不存在
?我猜
“two\u id”应该是别的,但我在网上找不到例子。。您能帮忙吗?JoinFormula确实没有文档:(文档确实很简单。请尝试使用@JoinFormula(value=“two\u id”,referencedColumnName=“two\u id”)然后查看生成的SQL以查看将什么作为属性值。另外,查看并查找有关其工作方式的索引。是的,我仍然没有任何意义。我尝试了使用
value=“x”,referencedColumnName=“y”
并且错误消息仍然是
列this.\u.two.\u id不存在
所以我不知道。您使用的是什么版本的Hibernate。JoinFormula从3.6.0.Beta1开始可以独立使用。如果您使用以前的版本,请尝试使用@JoinColumnsOrFormulas({@JoinColumnOrFormula(formula=@JoinFormula(value=“two.\u id”)})