#java #sql-server #hibernate
#java #sql-сервер #гибернация
Вопрос:
Допустим, у меня есть Entity
класс с именем Students
@Data
@Entity
@Table(name = "dbo.students")
public class Students implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private String studentId;
@Column(name = "name")
private String studentName;
@Column(name = "course")
private String studentCourse;
@Column(name = "date_admitted")
private String dateAdmitted;
}
И MS SQL
таблица с именем students
id name course date_admitted
1 Pankesh EEE 2020-10-21 07:52:30.977
2 Pankesh IT 2020-11-03 11:53:20.976
3 Pankesh CE 2020-09-11 08:30:29.975
Я хочу получить последнюю запись
2 Pankesh IT 2020-11-03 11:53:20.976
Мой Hibernate
запрос
session.createQuery("FROM Students WHERE name='" studentName "' ORDER BY date_admitted DESC")
Какой Hibernate
запрос я должен задать для этого случая?
Примечание: я использую AnnotationMapping
метод для сопоставления с MS SQL
Комментарии:
1. Разве последняя запись не должна иметь ID = 2 (я думаю, вы перепутали свои образцы данных)?
2. Ой, я виноват. Ошибка опечатки
3.
dateAdmitted
также не должно бытьString
. РассмотримZonedDateTime
илиLocalDateTime
4. Это выдаст мне
Could not deserialize
ошибку. Я уже тестировал это раньше на Java5. Когда я помещаю его как
String
, я могу получитьHibernate
журнал
Ответ №1:
Используйте entityManager.createQuery("FROM Students WHERE studentName = :name ORDER BY dateAdmitted DESC" ).setParameter("name", studentName).setMaxResults(1).getResultList();
Комментарии:
1. Но мой
session.createQuery(FROM Students WHERE name='" studentName "' ORDER BY date_admitted DESC)
2. Я пытаюсь помочь вам здесь избежать внедрения SQL. Никогда не объединяйте значения в запрос. Всегда используйте параметр, который выполняет правильное экранирование для вас.
3. Почему это может привести к SQL-инъекции / утечке данных?
4. Никогда не слышал о таблицах bobby? bobby-tables.com
5. нет, я никогда не слышал о сатире SQL-инъекций