Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
Hibernate 为什么@OneToOne双向关系在查询所属实体时给我一个空代理?_Hibernate_Jpa_One To One_Bidirectional - Fatal编程技术网

Hibernate 为什么@OneToOne双向关系在查询所属实体时给我一个空代理?

Hibernate 为什么@OneToOne双向关系在查询所属实体时给我一个空代理?,hibernate,jpa,one-to-one,bidirectional,Hibernate,Jpa,One To One,Bidirectional,我正在使用Hibernate 5.2.4。 这两个实体具有一对一的双向关系: @Entity @Table(name="post") public class Post { @Id @Column(name="id", nullable=false) private int id; @Column(name="text", nullable=false) private String text; @OneToOne(mappedBy="post

我正在使用Hibernate 5.2.4。 这两个实体具有一对一的双向关系:

@Entity
@Table(name="post")
public class Post {
    @Id
    @Column(name="id", nullable=false)
    private int id;

    @Column(name="text", nullable=false)
    private String text;

    @OneToOne(mappedBy="post", fetch=FetchType.LAZY, optional=true)
    private PostDetails details;

    ...
}

@Entity
@Table(name="post_details")
public class PostDetails implements Serializable {
    @Id
    @OneToOne(fetch=FetchType.LAZY, optional=false)
    @JoinColumn(name="post_id", nullable=false)
    private Post post;

    @Column(name="date", nullable=false)
    private Date date;
    ...
}
这是一对一双向关系的最基本情况。我认为唯一与基本情况不同的是,
PostDetails
使用
Post
作为其ID,而不是拥有自己的ID

以下是表格:

这是我的数据:

最后,这是我的问题:

PostDetails pd = s.createQuery(
        "select pd"
        + " from PostDetails pd"
        + " join [fetch] pd.post p"
        + " where p.text like '%banana%'"
    , PostDetails.class)
    .setMaxResults(1)
    .getSingleResult();

System.out.println(pd.getDate());
System.out.println(pd.getPost().getText()); // Null pointer here even when "join fetch" is used
为什么
pd.getPost()
会给我一个
null
?无论我是否使用
join fetch
我总是得到一个
null
。通过使用
joinfetch
为两个表的所有列生成SQL查询,但
Post
代理仍然为空。使用
EAGER
作为提取类型也无法解决这一问题

如果我通过从
Post
中删除
PostDetails
使这种关系成为单向的,那么一切都会正常工作。为什么呢

以下是此示例的完整代码:


从概念上讲,查询一篇文章会更有意义。但是,如果您想到这个SSCCE,您可以发布生成的SQL。我真正想查询的是PostDetails。我甚至不需要后期初始化。问题是,如果/当我确实需要Post时,我会得到一个空指针,而不是使用一个代理来触发查询并提供属性。我添加了示例的全部代码。这是一个概念,从概念上来说,查询一篇文章更有意义。但是,如果您想到这个SSCCE,您可以发布生成的SQL。我真正想查询的是PostDetails。我甚至不需要后期初始化。问题是,如果/当我确实需要Post时,我会得到一个空指针,而不是使用一个代理来触发查询并提供属性。我添加了示例的全部代码。这是你的电话号码