ERROR: Field 'scId' doesn't have a default value
来源:互联网 发布:交互设计要学编程吗 编辑:程序博客网 时间:2024/06/06 20:07
问题标签:
hibernate、@ManyToMany 、主键
抛出异常:
ERROR: Field ‘scId’ doesn’t have a default value
问题描述:
有Student,Subject,Score 三个实体类,表示学生、科目、分数,
其中Student与Subject采用ManyToMany关系,生成表score,
而Score实体类又分别与student和subject成ManyToMany关系,且有自己的主键scId。具体代码参考下文。
在往数据库中添加score时,抛出异常ERROR: Field 'scId' doesn't have a default value
。
问题原因:
代码的原意是score表以自己的scId为主键,然而hibernate在生成score表时会以studentId和subjectId为主键 ,导致scId不能作为主键自动生成,因而抛出ERROR: Field 'scId' doesn't have a default value
异常。
解决办法:
手动建 score表,再执行程序。
建表SQL:
DROP DATABASE IF EXISTS hibernate;CREATE DATABASE hibernate;CREATE TABLE score(scId INT PRIMARY KEY AUTO_INCREMENT,stuId INT REFERENCES student(stuId),subId INT REFERENCES `subject`(subId),score INT);
源码
student.java
package demo1.model;import...@Entitypublic class Student { @Id @GeneratedValue private int stuId; private String stuName; @ManyToMany( targetEntity=Subject.class, cascade={CascadeType.ALL} ) @JoinTable( name="score", joinColumns=@JoinColumn(name="stuId",referencedColumnName="stuId"), inverseJoinColumns=@JoinColumn(name="subId",referencedColumnName="subId") ) private Set<Subject> subs; //get() set()...}
subject.java
package demo1.model;import...@Entitypublic class Subject { @Id @GeneratedValue private int subId; private String subName; @ManyToMany( cascade = {CascadeType.ALL}, mappedBy = "subs", targetEntity = Student.class ) private Set<Student> stus; //...get() set()}
scoreBean.java
package demo1.model;import...@Entity@Table(name="score")public class ScoreBean { @Id @GeneratedValue private int scId; private int score; @ManyToOne(cascade={CascadeType.ALL}) @JoinColumn(name="stuId") private Student student; @ManyToOne(cascade={CascadeType.ALL}) @JoinColumn(name="subId") private Subject subject; //...get() set()}
测试代码(依次执行):
@Test public void createSubjects(){ Session session = sf.getCurrentSession(); session.beginTransaction(); Subject sub1 = new Subject(); sub1.setSubName("Chinese"); Subject sub2 = new Subject(); sub2.setSubName("Math"); Subject sub3 = new Subject(); sub3.setSubName("English"); Subject sub4 = new Subject(); sub4.setSubName("Physics"); session.save(sub1); session.save(sub2); session.save(sub3); session.save(sub4); session.getTransaction().commit(); } @Test public void createStudents(){ Session session = sf.getCurrentSession(); session.beginTransaction(); for(int i =1;i<=5;i++){ Student stu1 = new Student(); stu1.setStuName("Jack"+i); session.save(stu1); } session.getTransaction().commit(); }@Test public void createScore(){ Session session = sf.getCurrentSession(); session.beginTransaction(); Student stu = (Student) session.get(Student.class, 1); Subject sub = (Subject) session.get(Subject.class, 1); ScoreBean sc = new ScoreBean(); sc.setScore(80); sc.setStudent(stu); sc.setSubject(sub); session.save(stu); session.save(sub); session.save(sc); session.getTransaction().commit(); sf.close(); }
0 0
- ERROR: Field 'scId' doesn't have a default value
- Hibernate error: Field 'firmwareId' doesn't have a default value
- MYSQL:ERROR: Field '***' doesn't have a default value
- Field Doesn't Have a Default Value
- Field 'id' doesn't have a default value
- Field 'OPINION' doesn't have a default value
- Field 'id' doesn't have a default value
- Field 'id' doesn't have a default value
- Mysql Field * doesn't have a default value解决方法
- Field 'id' doesn't have a default value问题解决方法
- Field 'id' doesn't have a default value
- Field 'id' doesn't have a default value
- Field 'id' doesn't have a default value
- Mysql Field * doesn't have a default value解决方法hibernate
- hibernate的Field 'id' doesn't have a default value
- Field 'id' doesn't have a default value 原因
- hibernate异常 --- Field "id" doesn't have a default value
- Mysql Field * doesn't have a default value解决方法
- 技术做减法
- 一种手机蹭wifi的新思路
- 如何在STM32F10x_StdPeriph_Template基础上建立自己的MDK工程(一)
- Android系统Recovery工作原理之使用update.zip升级过程分析(二)---update.zip差分包问题的解决
- Android微信支付之免jar包集成方式(简单至极)
- ERROR: Field 'scId' doesn't have a default value
- leetcode 152 Maximum Product Subarray
- Jquery中神奇的事件命名空间
- UiAutoMator Helper自动运行测试用例
- MySQL 入门笔记
- JSP页面通过jstl进行变量累加
- Linux的echo输出命令详解
- Standford机器学习 逻辑回归(Logistic Regission)以及过拟合问题解决(Regularization)
- POJ 1308 HDU 1358 Is It A Tree? 并查集 (好多WA点)