개발/Spring
-
[Spring] Maven 프로젝트 Intellij archetype안나오는 문제개발/Spring 2021. 11. 16. 15:23
현재 Intellij Community 버젼을 사용중에 있다. maven에 대해서 공부하고 Maven을 이용한 프로젝트를 만들던 중 maven 프로젝트를 클릭하면 archetype에 아무런 선택지가 없는 것을 확인하고 관련한 문제를 stackoverflow에서 찾아 혹여나 몰라 정리해 둔다. https://stackoverflow.com/questions/20030667/how-to-use-maven-archetype-in-intellij-idea-such-as-spring-mvc-quickstart-arche How to use maven archetype in intellij idea, such as spring-mvc-quickstart-archetype? I'm a newbie of maven. ..
-
[Hibernate] Lazy모드 신기한점개발/Spring 2021. 11. 9. 23:37
Hibernate 모드에서 Lazy모드를 공부하던 중 신기한 것을 발견했다. 아래 콘솔창을 보면 분명 Hibernate가 SQL문을 한번만 실행한 것을 알 수 있다. 이는 Lazy모드이기에 필요없는 부분은 SQL을 실행하지 않기 때문이다. 여기까지는 Lazy모드가 잘 작동된다고 생각했다. 그리고 또 다른 사진이다 분명 코드상의 다른점은 없다. 하지만 콘솔에의 경우 보이는 바와 같이 종속된 클래스까지 불러오는 것을 볼 수 있다. 이부분에 대해서 궁금해서 찾아보니 HIbernate가 저 디버거 varaibles탭에 있는 instructor을 클릭하는 순간 필요한에 대한 SQL을 실행한다고 한다. 도대체 이건 어떻게 작동하는지 도통 알수가 없다... 추가 찾아보니 Dynamic Proxy Classes라고 런..
-
[Hibernate] One-to-many, 외래키가 null개발/Spring 2021. 11. 9. 20:45
하이버네이트를 사용하다보면 각 객체간 1:N의 관계를 설정할 때가 있다. 이 경우에 흔히 외래키를 가지고 있는 개체에서 JoinColumn을 이용해 외래키를 지정하게 된다. 이때 만약 상위 클래스의 클래스이름이 Student 이고 기본키가 id 인경우 @JoinColumn(name = "Student_id")로 객체간 관계를 명시한다. 근데 좀 이상한 일이 벌어졌다. 공부를 하면서 ArrayList에 N에 해당하는 객체들을 먼저 저장해두고 이를 1에 해당하는 객체에 연결해주니 정상적으로 Insert가 안되는 문제가 발생했다. 이에 내부적으로 어떠한 로직이 있는지는 현재 알아보지 않았으나 객체를 생성할 때 각 객체가 가지고 있는 프로퍼티에 고유의 메모리를 하나하나 다 캐시해두고 있는 듯한 느낌을 받았다. ..
-
[Spring-hibernate] Cascade 종류개발/Spring 2021. 11. 6. 22:08
Enum 행위 ALL 아래 Cascade 전체를 적용 PERSIST 저장 전파 MERGE REMOVE 삭제 전파 REFRESH 테이블을 새로고침하여 값을 다시 읽음 DETACH 관계 끊음 솔직히 MERGE나 DETACH는 무슨 뜻인지 잘 모르겠음. 의문사항이 있었음 분명 DETACH로 관계를 끊음을 명시했지만, 부모 테이블의 값이 있어 자식 테이블의 값이 존재하지 않는 상황이 발생, 이 문제를 부모 엔테티의 외래키에 Null을 주어 해결했지만 Cascade detach에 대해서 제대로 된 이해를 하지 않은 것 같은 느낌을 받음.
-
[Spring-Hibernate] cretaeQuery, is not mapped 에러개발/Spring 2021. 11. 6. 14:16
Hibernate의 경우 SQL query의 대소문자를 실제 Entiry의 Class이름과 필드 이름을 정확히 맞춰줘야 한다. 만약 다음과 같은 Enrity가 있다고 하자. package com.ukhyun.hibernate.demo.entity; import javax.persistence.*; @Entity @Table(name = "student") public class Student { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) // Auto increment @Column(name = "id") private int id; @Column(name = "first_name") private String firstName; @Column(n..
-
[Spring] Bean Scope개발/Spring 2021. 11. 4. 00:02
Spring에서 Bean이라고 함은 쉽게 표현한다면 인스턴스라고 말할 수 있다. 사실 인스턴스라고 말하기에는 좀 다르다는 것을 스프링을 공부하다보면 느낄 수 있다. 하지만 쉽게 인스턴스라고 생각하고 그 좀 다름에 대해서는 스프링을 공부하면서 체감하는 것이 좋다. Spring 에서의 Bean은 Scope라는 것을 가진다. 이 Scope는 일반적으로 생각하는 코드의 Scope와는 조금 다르다. Bean의 Scope는 총 5가지가 있다. Singleton(default) Prototype Request Session Global Session 기본값인 싱글톤은 싱글톤 처럼 작동하며 실제 Bean을 생성해 주소를 비교해보면 싱글톤임을 알 수 있다. 그리고 다음인 프로토타입은 빈을 생성 할 때마다 새로운 인스턴스..
-
[Spring] Autowired개발/Spring 2021. 11. 3. 22:06
이전 XML로 Bean을 생성 했을 때에는 Bean을 생성한 후 construct-arg 나 setter로 클래스 내부에서 사용하는 객체를 등록해 주어야 했다. 하지만 @Autowired 어노테이션을 이용한다면 이를 할 필요가 없다. @Component public class TennisCoach implements Coach { private FortuneService fortuneService; //아래의 생성자에 하는 것도 가능하고 이렇게도 가능함 이 때는 Setter Autowired //@Autowired //private FortuneService fortuneService; @Autowired public TennisCoach(FortuneService fortuneService) { thi..