Я написал метод для копирования внешних данных Mysql в мою текущую базу данных как DAD учащихся. Когда я пишу в текущую базу данных непосредственно на уровне персистентности, я получаю правильные результаты, но если я верну список, чтобы использовать его в логическом слое, происходят странные вещи, и поле «курсы» студентов с тем же именем будет таким же, он должен быть другим.Странное поведение при возврате списка из вызова базы данных Mysql
Кто-нибудь еще испытал странное поведение при возврате списков из базы данных?
Вот мой код:
List<Student> fetchlist = new ArrayList<Student>();
try {
//Connecting to external DB
Class.forName("com.mysql.jdbc.Driver");
Connection connect = DriverManager.getConnection(dbstring);
//GET STUDENTS
Map<String, Student> studentMap = new HashMap<String, Student>();
Statement statementStudents = connect.createStatement();
ResultSet resultSetStudents = statementStudents.executeQuery("select * from students2");
while (resultSetStudents.next()) {
Student student = new Student();
String sid = resultSetStudents.getString("sid");
String firstname = resultSetStudents.getString("firstname");
String lastname = resultSetStudents.getString("lastname");
String email = resultSetStudents.getString("email");
student.setFirstname(StringEscapeUtils.unescapeHtml(firstname));
student.setName(StringEscapeUtils.unescapeHtml(lastname));
student.setEmail(email);
studentMap.put(sid, student);
}
Statement statementBookings = connect.createStatement();
ResultSet resultSetBookings = statementBookings.executeQuery("select * from bookings2");
//Go through bookings in order to complete Student and add
while (resultSetBookings.next()) {
String cid = resultSetBookings.getString("cid");
String sid = resultSetBookings.getString("sid");
String course = "";
if (cid.equals("1521"))
course = "Course 1";
else if (cid.equals("1522"))
course = "Course 2";
else if (cid.equals("1523"))
course = "Course 3";
else if (cid.equals("1524"))
course = "Course 4";
Student student = studentMap.get(sid);
student.setCourse(course);
fetchlist.add(student);
}
} catch (ClassNotFoundException e) {
log.error("Could not find Mysql JDBC class");
} catch (SQLException e) {
log.error("Error executing SQL statement");
}
return fetchlist;
Имеет ли класс ученика методы hashMap и equals? Если не создать его и повторить тест. –
какой хэш? Студент является DAO и должен быть сериализуемым. – javanoob
Я предполагаю, что вы имеете в виду это: http://stackoverflow.com/questions/27581/overriding-equals-and-hashcode-in-java – javanoob