Какой запрос гибернации я должен использовать для получения последней записи в MS SQL?

#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 ошибку. Я уже тестировал это раньше на Java

5. Когда я помещаю его как 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-инъекций