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

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注释后,列的值不就变成实体了?但数据表中定义的是基本类型啊?这怎么理解呢,要插入的该外键列的值到底从哪获得,以及如何插入?

    评论

报告相同问题?

悬赏问题

  • ¥15 CreateBitmapFromWicBitmap内存释放问题。
  • ¥30 win c++ socket
  • ¥15 CanMv K210开发板实现功能
  • ¥15 C# datagridview 栏位进度
  • ¥15 vue3页面el-table页面数据过多
  • ¥100 vue3中融入gRPC-web
  • ¥15 kali环境运行volatility分析android内存文件,缺profile
  • ¥15 写uniapp时遇到的问题
  • ¥15 vs 2008 安装遇到问题
  • ¥15 matlab有限元法求解梁带有若干弹簧质量系统的固有频率