티스토리 뷰
Hibernate Advanced : javax.persistence @OrderBy 사용하기
Korean Eagle 2020. 6. 4. 23:351. 이 포스트는 javax.persistence @OrderBy annotation을 설명한다.
2. @OrderBy는 데이터베이스의 Query 구문의 Order by 구문과 동일한 효과를 가진다.
2-0 @OrderBy("fieldname [ASC | DESC] ") 형식으로 사용된다.
2-1 데이터베이스 실행 시 가장 끝에 order by가 붙으며 지정된 field와 정렬 순서가 그대로 삽입된다.
2-2 가지고 올 때도 순서를 지정하기 때문에 List, Set, Map에서는 의미가 있다.
2-3 하지만, 별도의 Comparator를 지정해야 하는 SortedMap, SortedSet에는 의미가 없다.
2-3-1 가져올 때 순서가 있어도 실제 Collection에 저장할 때 기본값으로 설정된 정렬기준으로 재정렬되기 때문이다.
2-3-2 그렇기 때문에 SortedMap, SortedSet라고 하는 것이다.
3. 이 포스트의 프로그램을 테스트 하려면 우선 값을 입력한 후, hbm2ddl을 update로 변경하여 값이 사라지지 않게 해야 한다.
4. Student Entity
4-1 @OrderBy에 course_name이 지정되어 있고 DESC가 있어 역순으로 나와야 한다.
package pe.pilseong.hibernateorderby.entity;
import java.util.HashMap;
import java.util.Map;
import javax.persistence.CollectionTable;
import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.MapKeyColumn;
import javax.persistence.OrderBy;
import javax.persistence.Table;
import lombok.Data;
import lombok.NoArgsConstructor;
@Entity
@Table(name = "student")
@NoArgsConstructor
@Data
public class Student {
public Student(String firstName, String lastName, String email) {
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@Column(name = "email")
private String email;
@ElementCollection
@CollectionTable(
name = "course",
joinColumns = @JoinColumn(name = "student_id")
)
@MapKeyColumn
@OrderBy(value = "course_name DESC")
@Column(name = "course_name")
private Map<String, String> courses = new HashMap<>();
}
5. 실행 코드
package pe.pilseong.hibernateorderby;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import pe.pilseong.hibernateorderby.entity.Student;
/**
* Hello world!
*
*/
public class App {
public static void main(String[] args) {
SessionFactory factory = new Configuration().configure()
.addAnnotatedClass(Student.class)
.buildSessionFactory();
Session session = factory.getCurrentSession();
session.beginTransaction();
// Student student = new Student("Pilseong", "Heo", "heops79@gmail.com");
// Map<String, String> courses = student.getCourses();
//
// courses.put("MT","Math");
// courses.put("SC", "Science");
// courses.put("EC", "Economics");
// courses.put("LG1", "Language");
// courses.put("LG2", "Language");
//
//
// session.persist(student);
Student student = session.get(Student.class, 1L);
System.out.println("Student :: " + student.toString());
for (String st : student.getCourses().keySet()) {
System.out.println("Course :: " + student.getCourses().get(st));
}
session.getTransaction().commit();
factory.close();
}
}
6. 결과 화면
6-1 실행 전 데이터베이스 값

6-2 실행 값
6-2-1 순서가 Science 부터 Economics 까지 순서가 역순으로 출력되고 있다.

'Spring > Hibernate' 카테고리의 다른 글
Hibernate Advanced : @Embedded, @Embeddable (0) | 2020.06.05 |
---|---|
Hibernate Advanced : SortedMap, SortedSet 사용하기 (0) | 2020.06.05 |
Hibernate Advanced : @ElementCollection Map 사용하기 (0) | 2020.06.04 |
Hibernate Advanced : @ElementCollection List 사용하기 (0) | 2020.06.04 |
Hibernate Advanced : @ElementCollection Set사용하기 (0) | 2020.06.04 |
- Total
- Today
- Yesterday
- 도커 개발환경 참고
- AWS ARN 구조
- Immuability에 관한 설명
- 자바스크립트 멀티 비동기 함수 호출 참고
- WSDL 참고
- SOAP 컨슈머 참고
- MySql dump 사용법
- AWS Lambda with Addon
- NFC 드라이버 linux 설치
- electron IPC
- mifare classic 강의
- go module 관련 상세한 정보
- C 메모리 찍어보기
- C++ Addon 마이그레이션
- JAX WS Header 관련 stackoverflow
- SOAP Custom Header 설정 참고
- SOAP Custom Header
- SOAP BindingProvider
- dispatcher 사용하여 설정
- vagrant kvm으로 사용하기
- git fork, pull request to the …
- vagrant libvirt bridge network
- python, js의 async, await의 차이
- go JSON struct 생성
- Netflix Kinesis 활용 분석
- docker credential problem
- private subnet에서 outbound IP 확…
- 안드로이드 coroutine
- kotlin with, apply, also 등
- 안드로이드 초기로딩이 안되는 경우
- navigation 데이터 보내기
- 레이스 컨디션 navController
- raylib
- 외부파일
- mapping
- one-to-many
- jsp
- Spring Security
- Validation
- one-to-one
- 상속
- MYSQL
- XML
- 스프링부트
- spring boot
- login
- Many-To-Many
- Security
- WebMvc
- 자바
- 매핑
- Rest
- form
- 하이버네이트
- 스프링
- 설정
- crud
- hibernate
- 설정하기
- RestTemplate
- Angular
- 로그인
- Spring