2017-10-17 111 views
0

我有一个类,我只需要来自另一个映射实体的单个列。我宁愿取消全面引用。有没有办法做到这一点?我已经详尽地搜索了一下,但是我绝对没有这个术语。休眠 - 只加入单列而不是整个实体

解释:

@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

您是否尝试过最后一个片段,但没有'@ OneToOne'和'@ JoinColumn'?只有'@ Formula'? – corsiKa

回答

1

你有几个选项。

首先是,如您所暗示的,使用@Formula - 如果没有其他注释,请使用@Formula。这应该完全符合你的期望。

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

+0

因此,我放弃了OneToOne和JoinColumn,只留下了公式,我得到“无法提取ResultSet; SQL [n/a]”。我需要“这里”的一部分,但我不确定这是否正确。 – Rig

0

我相信你不应该那样做。你的实体类应该只描述数据的存储方式。你不应该加入一些逻辑。

另请注意,如果不将外键存储到其他表中,会发生什么情况。如果实体发生更改,则不会获得更新。