代码之家  ›  专栏  ›  技术社区  ›  Mohammed

休眠OneToOne NullPointerException

  •  0
  • Mohammed  · 技术社区  · 6 年前

    我有这个密码

    private PostsContentsEntity contentsEntity;
    
    @OneToOne( targetEntity = PostsContentsEntity.class)
    @JoinColumn(name = "PostId",referencedColumnName = "PostId", insertable = false, updatable = false)
    public PostsContentsEntity getContentsEntity() {
        return this.contentsEntity;
    }
    
    public void setContentsEntity(PostsContentsEntity contentsEntity) {
        this.contentsEntity = contentsEntity;
    }
    

    在数据库上 post表格

    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 成功返回数据
    但如果不相等 后内容ID 回来 NullPointerException

    我补充道 @JoinColumn(name = "PostId",referencedColumnName = "PostId") 加入 张贴 后内容ID 但同样的问题!!

    1 回复  |  直到 6 年前
        1
  •  0
  •   RubioRic Danail Tsvetanov    6 年前

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

    让我从中复制此示例代码 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\u键 . 在您的情况下,外键似乎放置在指向POST的POST\U内容中。

    你必须 @JoinColumn连接柱 在你的课堂上 PostsContentsEntity . 按照这个例子, PostsEntity 应使用中的属性映射对象 Posts内容实体

    像这样的

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