Я новичок в Hibernate и имею следующую ситуацию:
класс А
курс курса продлевает A (название курса уникально)
ученики класса (проводит набор курсов)
Моя цель - иметь возможность добавлять новых студентов в базу данных, которые посещают существующие курсы. Мне даже не нужно обновлять существующий курс, но я не хочу проваливать операцию сохранения.
Я использую сеанс saveOrUpdate (cascade = ALL), и хотя все saveOrUpdates происходят до сброса - все в порядке.
при повторном запуске основного я получаю сообщение об ошибке:
Ошибка SQL: 1062, SQLState: 23000
Повторяющаяся запись «История» для ключа «COURSE_NAME»
Ниже приведен фрагмент кода.
любая помощь приветствуется.
класс 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;
}
}
И класс Ученик , который содержит список ядер :
@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;
}
}