hibernate OneToOne NullPointerException

时间:2018-02-27 10:07:16

标签: java hibernate one-to-one wildfly-11

我有这个代码

PostId  UserId  PostTime
7   3   2018-02-27 02:52:21
8   3   2018-02-27 02:52:38
9   3   2018-02-27 02:52:57
10  3   2018-02-27 02:53:52
11  3   2018-02-27 02:54:01

在数据库上 邮政表

PostContentId   PostId  Content MediaUrl    ContentType
1   7   text post   noMedia 1
2   8   photo post  image/TueFeb27025238MST2018_1519725158056.jpg   2
3   9   video post  video/TueFeb27025257MST2018_1519725177971.mp4   3
4   10  text post   noMedia 1
5   11  photo post  image/TueFeb27025401MST2018_1519725241249.jpg   2

发布内容表

PostId
问题是 当post table上的PostContentId = post content table PostContentId时,它会成功返回数据
但如果它不等于NullPointerException则返回@JoinColumn(name = "PostId",referencedColumnName = "PostId")

我添加PostId加入PostContentId而不是#content-header,但问题相同!!

1 个答案:

答案 0 :(得分:0)

我认为你的实体之间的关系没有正确映射。

让我从Oracle Javadoc

复制此示例代码

示例1:映射外键列的一对一关联

// On Customer class:

@OneToOne(optional=false)
@JoinColumn(
    name="CUSTREC_ID", unique=true, nullable=false, updatable=false)
public CustomerRecord getCustomerRecord() { return customerRecord; }

// On CustomerRecord class:

@OneToOne(optional=false, mappedBy="customerRecord")
public Customer getCustomer() { return customer; }

正如您所看到的那样,注释@JoinColumn通常放在表示获得 FOREIGN_KEY 的表的实体中。在您的情况下,外键似乎放在指向POST的POST_CONTENT中。

您必须将@JoinColumn放入班级PostsContentsEntity。 在示例之后,PostsEntity应该使用PostsContentsEntity

中的属性映射对象

像这样的东西

// On PostsContentsEntity class:

@OneToOne(optional=false)
@JoinColumn(
    name="POST_ID", unique=true, nullable=false, updatable=false)
public PostsEntity getPostsEntity() { return postsEntity; }

// On PostsEntity class:

@OneToOne(optional=false, mappedBy="postsEntity")
public PostsContentsEntity getPostsContentsEntity() { return postsContentsEntity; }