0

Student と University という 2 つのエンティティ クラスがあり、学生と大学の関係は多対 1 です。つまり、多くの学生が 1 つの大学で勉強できます。私の入力jspページは、基本的に大学名と学生のメールアドレスを登録するように求めます。

これが流れです。入力ページに次のように入力します-

大学1、学生1 - これにより、データベースに大学1と学生1が追加されます。

入ると~

大学1、学生2 - ここでの私の意図は、最初に大学1がデータベースにすでに存在するかどうかを調べることです。その場合は、同じ大学を学生オブジェクトに関連付けて保存してみてください。しかし、休止状態がデータベースにもう1つの大学オブジェクトを追加しようとしているときに、次の例外が発生しています-

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 に答える