项目中我们经常把实体类公共的属性抽取出来(主键ID,创建时间crateTime等),抽取成一个BasedModel,然后让有需要的实体类去继承。
package com.test.demo.model;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
import java.io.Serializable;
/**
* 公共类
*/
@MappedSuperclass
public class BasedModel implements Serializable {
private String id;
@Id
@Column(name = "ID")
@GeneratedValue(generator="system-uuid")
@GenericGenerator(name="system-uuid",strategy="uuid")
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
然后启动时报错,查询出来说的时,没有主键。但是明明继承了公共类,为什么就创建失败了呢!后来才发现,主要原因是,公共类少一个注解
@MappedSuperclass
加上这个注解就ok了!
hibernate 生成表时就可以连父类的字段一起生成了
本文介绍了一个常见的Hibernate问题:在使用基于UUID的主键生成策略时,实体类继承自公共基类但未正确生成主键。通过添加@MappedSuperclass注解到基类,解决了Hibernate无法识别父类字段的问题。
4699

被折叠的 条评论
为什么被折叠?



