【发布时间】:2018-12-21 10:14:44
【问题描述】:
当我进行插入时,traduction 中的外键(idMot 引用 mot)为空,而我的前端发送了正确的外键。我最终得到了这个错误:not-null 属性引用了一个空值或瞬态值:com.virtual.expertise.mydico.model.Traduction.mot
我想我的模型做错了什么,但仍然不知道是什么。
这里是翻译模型:
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "langue")
private String langue;
@Column(name = "traduction")
private String traduction;
@JsonBackReference(value = "mot-traduction")
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "idMot", nullable = false, insertable = true,
updatable = false)
private Mot mot;
@CreationTimestamp
@Column(name = "dateCreation")
private Date dateCreation;
这里是 mot 模型:
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "libelle")
private String libelle;
@JsonBackReference(value = "user-mot")
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "idUser", nullable = false, insertable = true, updatable = false)
private User user;
/** les traductions. */
@JsonManagedReference(value = "mot-traduction")
@OneToMany(mappedBy = "mot", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Set<Traduction> traductions;
@CreationTimestamp
@Column(name = "dateCreation")
private Date dateCreation;
这是转导表:
DROP TABLE IF EXISTS `traduction`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `traduction` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`langue` varchar(100) DEFAULT NULL,
`traduction` varchar(100) DEFAULT NULL,
`idMot` bigint(20) DEFAULT NULL,
`dateCreation` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idMot_idx` (`idMot`),
CONSTRAINT `idMot` FOREIGN KEY (`idMot`) REFERENCES `mot` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
这是我的网络服务:(在翻译中 idMot 显示为 null)
@POST
@Path("/create")
public Traduction createTraduction(Traduction traduction) throws Exception {
return FacadeBackOffice.getInstance().getTraductionService().createTraduction(traduction);
}
有人可以解决吗?
【问题讨论】:
-
您是否为
Traduction.mot分配了一个未持久化的实例(还没有ID)?先尝试坚持下去。 -
如果
Mot在Traduction之前没有被持久化,Mot.id仍然为空。但在这种情况下,休眠通常会引发异常,并显示消息“分离的实体传递给持久”。也许GenerationType.AUTO的东西不能正常工作。您使用的是哪个数据库和方言? -
我正在使用 mySQL 工作台...
-
我没有在代码中看到你在哪里设置 mot:traduction.setMot(mot);
标签: java hibernate null foreign-keys