我有2个名为学生和大学的实体课程,学生和大学之间的关系是多对一的,这意味着许多学生可以在一所大学学习。我输入的jsp页面基本上会要求大学名称和学生的电子邮件地址进行注册。
这是流程。我在输入页面中输入以下内容 -
university1,student1 - 这将在我的数据库中添加university1和student1。
当我进入 -
university1,student2 - 我的目的是首先找出university1是否已存在于我的数据库中。如果它然后将同一所大学与学生对象相关联并尝试保存它。但是,当我这样做时,hibernate试图在数据库中添加一个大学对象,并且我得到了以下异常 -
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '1' for key 'university_id'.
以下是我的实体类 -
@Entity
@Table(name="students")
public class Student implements Serializable{
private Integer studentId;
private University university;
@Id
@GeneratedValue
@Column(name = "student_id")
public Integer getStudentId() {
return studentId;
}
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "university_id")
public University getUniversity() {
return university;
}
}
@Entity
@Table(name="university")
public class University implements Serializable {
private Integer universityId;
@Id
@GeneratedValue
@Column(name = "university_id")
public Integer getUniversityId() {
return university;
}
public void setCompanyId(Integer companyId) {
this.companyId = companyId;
}
@Column(name = "university_name", unique = true, nullable = false)
public String getUniversityName() {
return university;
}
}
这是简单的Java代码。
University university = universityService.getUniversityByName(student.getUniversity().getUniversityName());
if(university != null) {
student.setUniversity(university);
}
getHibernateTemplate().saveOrUpdate(student);
我正在使用Spring MVC,而Hibernate正在生成数据库架构。看起来我犯了一些非常基本的错误。
答案 0 :(得分:0)
hibernate不会发出查询来识别数据库中是否已存在具有相同唯一列值的其他记录,您必须自己执行此操作。
List<University> unis = session.createCriteria(University.class)
.add(<Restrictions.eq("name", name)
.list<University>()
University u;
if (unis.getCount() == 0)
{
u = new University();
...
}
else
{
u = unis.get(0);
}