Hibernate - 仅加入单列而不是整个实体

时间:2017-10-17 21:06:56

标签: java hibernate jpa

我有一个类,我只需要来自另一个映射实体的单个列。我宁愿没有完整的参考资料。有没有办法做到这一点?我已经详尽地用Google搜索了,但我的术语不能正确。

说明:

@Entity
@Table(name = "foo")
@Data
public class Foo {
    @Id
    @Column(name = "itemid")
    private long id;

    @Column(name = "name")
    private String name;
}

这有效:

@Entity
@Table(name = "bar")
@Data
public class Bar{
    @Id
    @Column(name = "itemid")
    private long id;

    @Column(name = "other_name")
    private String otherName;

    @OneToOne
    @PrimaryKeyJoinColumn
    private Foo foo;
}

但我想:

@Entity
@Table(name = "bar")
@Data
public class Bar{
    @Id
    @Column(name = "itemid")
    private long id;

    @Column(name = "other_name")
    private String otherName;

    @OneToOne
    @JoinColumn(name = "itemid")
    @Formula("SELECT name FROM FOO v where v.id = id")
    // Something here...not sure what. Where name is the name from Foo
    private String name;
}

2 个答案:

答案 0 :(得分:1)

你有两个选择。

首先,正如您所提到的,使用@Formula - 没有您在那里的其他注释,只需使用@Formula。这应该完全符合你的期望。

或者,如果您经常需要这样做,您可以创建一个连接两列的视图,并使您的对象基于该视图而不是原始表。

答案 1 :(得分:0)

我相信你不应该这样做。您的实体类应仅描述数据的存储方式。你正在添加一些不应该的逻辑。

还要考虑当您不将外键存储到另一个表时会发生什么。如果实体已更改,则无法获得更新。