Хорошо, я использовал Hibernate в нескольких проектах сейчас, но я не изучил его тонкости, прежде чем использовать его. Я начал с изучения кодов, которые использовали JPA Annotations и интегрированы с Spring, и все сработало хорошо. Но теперь, когда я хочу преподавать базовый Hibernate для своих учеников, и я готов приступить к созданию примера и с помощью руководства по документации главы 1, у меня возникла проблема с сохранением набора значений коллекции в одном постоянном классе.Hibernate не сохраняет набор значений
Вот упорная класс ...
public class Student {
private Long id;
private String firstName;
private String lastName;
private Set<Course> courses = new HashSet<Course>();
private Set<String> contactDetails = new HashSet<String>();
//getters and setters
}
Отображение файлов ...
<hibernate-mapping package="com.phoenixone.school.model">
<class name="Student" table="student">
<id name="id" column="studentId">
<generator class="native" />
</id>
<property name="firstName" />
<property name="lastName" />
<set name="courses" table="student_course" lazy="false">
<key column="studentId" />
<many-to-many column="courseId" class="Course" />
</set>
<set name="contactDetails" table="contactDetails">
<key column="studentId" />
<element type="string" column="contactDetail" />
</set>
</class>
</hibernate-mapping>
дао (экономия часть)
public class StudentDaoHibernate {
public void save(Student student){
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
session.save(student);
session.getTransaction().commit();
}
}
Испытательная часть ...
public class TestStudentDaoHibernate {
public static void main(String[] args) {
CourseDaoHibernate courseDao = new CourseDaoHibernate();
Course c1 = new Course();
c1.setCourseCode("CWD");
c1.setCourseName("Web Dev");
courseDao.save(c1);
Set<Course> courses = new HashSet<Course>();
courses.add(c1);
Student student = new Student();
student.setFirstName("Bob");
student.setLastName("Santos");
student.setCourses(courses);
student.getContactDetails().add("123456789");
StudentDaoHibernate dao = new StudentDaoHibernate();
dao.save(student);
}
}
Когда я выполняю эти строки кода ...
Session session = HibernateUtil.getSessionFactory().getCurrentSession()
session.beginTransaction();
Student student = (Student)session.createCriteria(Student.class)
.add(Restrictions.eq("id", new Long(1))).uniqueResult();
System.out.println("First Name: " + student.getFirstName());
System.out.println("Last Name: " + student.getLastName());
System.out.println("Courses enrolled with...");
for(Course c:student.getCourses()){
System.out.println(c.getCourseName());
}
System.out.println("Contact details...");
for(String s:student.getContactDetails()){
System.out.println(s);
}
Что я получаю это ...
Имя: Bob
Фамилия: Santos
курсы зачисленных. ..
Web Dev
Контактная информация ...
Это приводит меня к выводу, что строка «123456789» не была сохранена. Как вы думаете, в чем проблема с моим кодом? Спасибо!
3 лет, и нет ответа. У меня такая же проблема ... – Stewart