我有一个类,我只需要来自另一个映射实体的单个列。我宁愿没有完整的参考资料。有没有办法做到这一点?我已经详尽地用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;
}
答案 0 :(得分:1)
你有两个选择。
首先,正如您所提到的,使用@Formula
- 没有您在那里的其他注释,只需使用@Formula
。这应该完全符合你的期望。
或者,如果您经常需要这样做,您可以创建一个连接两列的视图,并使您的对象基于该视图而不是原始表。
答案 1 :(得分:0)
我相信你不应该这样做。您的实体类应仅描述数据的存储方式。你正在添加一些不应该的逻辑。
还要考虑当您不将外键存储到另一个表时会发生什么。如果实体已更改,则无法获得更新。