0

我有 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 生成的。看起来我犯了一些非常基本的错误。

4

1 回答 1

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);
}
于 2012-07-02T06:16:19.273 回答