最近学习了一点Hibernate的东西,今天遇到一个莫名奇妙的问题。在我配置好表的注解和对应关系之后,当我想往数据库中插入数据时,报了下面的错误:
org.hibernate.AssertionFailure: null id in bean.Grade entry (don't flush the Session after an exception occurs)
下面放上我 Grade.java
这个类的代码
package bean;
import org.hibernate.annotations.GenericGenerator;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name = "GRADE")
public class Grade {
@Id
@GenericGenerator(name = "gid", strategy = "native")
@GeneratedValue(generator = "gid")
private int gid;
//班级名称
private String name;
//班级描述
private String desc;
@JoinColumn(name = "gid")
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Set<Stu> stus = new HashSet<>();
public Grade() {
}
public Grade(String name, String desc) {
this.name = name;
this.desc = desc;
}
public int getGid() {
return gid;
}
public void setGid(int gid) {
this.gid = gid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public Set<Stu> getStus() {
return stus;
}
public void setStus(Set<Stu> stus) {
this.stus = stus;
}
}
看了好多遍都没有找到问题,最终在一篇博客里面看到的下面这句话恍然大悟:
null id这个问题时,有可能是字段里用到了数据库的关键字了.(尤其注意这个describe)
对,我定义了一个字段 desc
,我想表达的意思是描述,结果和数据库的关键字冲突了,将 desc
字段改为其它单词就可以解决问题啦。
希望可以帮助到有需要的人。
参考链接:http://blog.csdn.net/Darkness_zero/article/details/21415909