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