我是Hibernate的新手并且遇到以下情况:
A类
课程延伸A (课程名称是唯一的)
班级学生(持有一套课程)
我的目标是为了能够将新学生添加到参加现有课程的数据库中。我甚至不需要更新现有课程,但不想让保存操作失败。
我正在使用session saveOrUpdate(cascade = ALL),而所有saveOrUpdates都在flush之前发生 - 一切正常。 当我重新运行我的主要时,我收到一个错误:
SQL错误:1062,SQLState:23000
关键“COURSE_NAME”
重复输入“历史记录”Bellow是代码的片段。 任何帮助表示感谢。
A类:
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorColumn(name="TYPE")
@Table(name="A")
public class A
{
private long aId;
private String info;
public A(String info)
{
this.info = info;
}
@Id
@GeneratedValue
@Column(name="A_ID")
public long getAId()
{
return aId;
}
public void setAId(long aId)
{
this.aId = aId;
}
//@Column(name="INFO", nullable=false, insertable=false, updatable=false)
@Column(name="INFO")
public String getInfo()
{
return info;
}
public void setInfo(String info)
{
this.info = info;
}
}
课程:
@Entity
@DiscriminatorValue("COURSE")
@Table(name="COURSE", uniqueConstraints = {@UniqueConstraint(columnNames={"COURSE_NAME"})})
public class Course extends A{
private String courseName;
public Course() {
super("initial");
}
public Course(String courseName, String info)
{
super(info);
this.courseName = courseName;
}
@Column(name="COURSE_NAME")
public String getCourseName() {
return this.courseName;
}
public void setCourseName(String courseName) {
this.courseName = courseName;
}
}
学生 持有Coreses列表:
@Entity
@Table(name = "STUDENT")
public class Student
{
private long studentId;
private String studentName;
private String additionalInfo;
private Set<Course> courses = new HashSet<Course>(0);
@Column(name = "ADDITIONAL_INFO")
public String getAdditionalInfo()
{
return additionalInfo;
}
public void setAdditionalInfo(String additionalInfo)...
public Student()
{
}
public Student(String studentName, String info, Set<Course> courses)
{
this.studentName = studentName;
this.courses = courses;
this.additionalInfo = info;
}
@Id
@GeneratedValue
@Column(name = "STUDENT_ID", unique=true)
public long getStudentId()
{
return this.studentId;
}
public void setStudentId(long studentId)...
@Column(name = "STUDENT_NAME", nullable = false, length = 100)
public String getStudentName()
{
return this.studentName;
}
public void setStudentName(String studentName)...
@ManyToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "aId")
public Set<Course> getCourses()
{
return this.courses;
}
public void setCourses(Set<Course> courses)
{
this.courses = courses;
}
}
答案 0 :(得分:1)
在没有看到代码的情况下,它无法准确地说出来。但是,我怀疑您正在创建一个课程名称为“History”的新对象,并将其添加到新的学生对象中。你应该做的是从数据库中获取courseName =“History”的课程对象,然后在新的学生对象中设置它。