Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate-仅连接单个列而不是整个实体_Java_Hibernate_Jpa - Fatal编程技术网

Java Hibernate-仅连接单个列而不是整个实体

Java Hibernate-仅连接单个列而不是整个实体,java,hibernate,jpa,Java,Hibernate,Jpa,我有一个类,只需要另一个映射实体中的一列。我宁愿没有完整的参考资料。有办法做到这一点吗?我已经用谷歌搜索过了,但我一定没有正确的术语 解释: @Entity @Table(name = "foo") @Data public class Foo { @Id @Column(name = "itemid") private long id; @Column(name = "name") private String name; } 这项工作: @Enti

我有一个类,只需要另一个映射实体中的一列。我宁愿没有完整的参考资料。有办法做到这一点吗?我已经用谷歌搜索过了,但我一定没有正确的术语

解释:

@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;
}

你有几个选择

第一个是,正如您所提到的,使用
@Formula
——不使用其他注释,只使用
@Formula
。这应该完全符合您的期望


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

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


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

您是否尝试了最后一个片段,只是没有
@OneToOne
@JoinColumn
?只有
@Formula
?因此,我删除了OneToOne和JoinColumn,只留下公式,得到“无法提取结果集;SQL[n/a]”。我需要其中的“where”部分,但我不确定这是否正确。