JPA的@JoinColumn 注解问题,提示外键列不能为空 5C

源实体中使用@JoinColumn指定外键(为参考实体的主键):

 @ManyToOne(cascade={CascadeType.REFRESH,CascadeType.DETACH}, 
            optional=true, fetch = FetchType.LAZY)
    @JoinColumn(name="DD_TYPE_ID")
    private FieldDropdownType type;

参考的FieldDropdownType 实体的主键:

 @Id
    @Column(name="DD_TYPE_ID")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long ddTypeId;

问题:
浏览器端传递的json部分如下:

 {
    "id": 10,
    ...,
    "type": {
        "ddTypeId": 1
    },
    ...
}

这是插入一条源实体的数据记录,id为源实体的主键值,type为@JoinColumn注解的属性,参考实体中存在ddTypeId为1的列。但请求时,服务端提示:

 **[RMI TCP Connection(4)-192.168.2.37] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 1048, SQLState: 23000
[RMI TCP Connection(4)-192.168.2.37] ERROR org.hibernate.util.JDBCExceptionReporter - Column 'DD_TYPE_ID' cannot be null
javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: could not insert: **

即DD_TYPE_ID列不能为空,但不是通过type属性传递了吗?如果不是这样传递,外键列的值应该是怎么设置的?

3个回答

补充一下,最不懂的是,@JoinColumn注释后,列的值不就变成实体了?但数据表中定义的是基本类型啊?这怎么理解呢,要插入的该外键列的值到底从哪获得,以及如何插入?

其实是一个判断条件写错了,哈哈,不过@JoinColumn指定的外键约束似乎没什么用,被依赖表的参考列不存在相应记录时,还是可以正常插入。。。。

@JoinColumn有用的,关键在于optional参数配错了,貌似还有个什么注解可以去掉必需性检查

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐