Liekkas_BX 2017-07-31 09:37 采纳率: 0%
浏览 9649
已结题

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

源实体中使用@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属性传递了吗?如果不是这样传递,外键列的值应该是怎么设置的?

  • 写回答

4条回答

  • Liekkas_BX 2017-07-31 10:02
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料