썸네일 @Transactional 안에서 LazyInitializationException, JPQL @Modifying JPQL, @Query 어노테이션을 통해 Update/Delete/Insert와 같은 Command를 사용하려면 @Modifying 어노테이션을 함께 추가해야 합니다.지금 내가 보내는 요청이 Query, 그러니까 SQL의 Select문이 아니라 DB에 변경을 끼친다는 것을 알리는 것이죠.저도 프로젝트 내에서 JPQL을 사용하는 부분에 위와 같이 @Modifying을 붙여 사용했습니다.@Modifying은 다음과 같은 두 Element를 받습니다. flushAutomatically는 해당 어노테이션이 붙은 modifying query를 실행 전에 영속성 컨텍스트에 있는 내용을 flush 하도록 합니다.clearAutomatically는 해당 어노테이션이 붙은 modifying query 실행 후에 영속성 ..
Interface에는 왜 protected 접근지정을 사용할 수 없을까? Java에서 protected 접근 지정자는 멤버를 클래스 내부 또는 동일 패키지에 속한 클래스와 하위(sub) 클래스에 공개한다. protected는 특히 super class의 멤버를 sub class에서 재사용하거나 오버라이딩 할 때 많이 사용한다. 상속에서 강력한 기능인 protected를 인터페이스에서는 사용할 수 없다. 그 이유를 알아보자. 사실 인터페이스에서 protected를 사용하지 못 하도록 하는 것에는 절대적인 이유라기 보단, 언어설계적인 이유가 크다. 이는 인터페이스의 목적과 큰 연관이 있는데, 인터페이스는 다른 클래스들에게 특정 메서드의 프로토콜을 제공하는 것을 목표로 한다. 즉, 이를 구현하는 여러 클래스에서 공통된 이름으로 서로 다른 일을 할 수 있는 메서드의 원형을 제공한다...
접근 지정자 비교하기 Java에는 클래스를 위한 2가지 접근지정자와 멤버를 위한 4가지 접근지정자가 있다. 클래스 접근 지정자 public: 패키지에 상관없이 모든 클래스에서 접근 가능. default: 같은 패키지 내 클래스에서만 접근 가능. 멤버 접근 지정자 public: 패키지에 상관없이 모든 클래스에서 접근 가능. protected: 같은 패키지 or 상속받은 클래스에서 접근 가능 private: 비공개. 동일 클래스 내의 멤버에서만 접근 가능 default(명시하지 않음): 같은 패키지 내 클래스에서만 접근 가능
이것이 자바다. 3~4 char 타입의 데이터를 연산할 때 char c1 ='A' + 1; char c2 = 'A'; //char c3 = c2 + 1;//컴파일 에러 System.out.println("c1: " + c1); System.out.println("c2: " + c2); //System.out.println("c3: " + c3); 1행은 아무런 문제가 없지만, 3행에서는 컴파일 에러가 생긴다. 이런 결과가 나타나는 이유는 자바의 리터럴 연산 방벙 때문이다. 자바에서는 리터럴 간의 연산은 타입 변환이 일어나지 않고 해당 타입으로 계산하기 때문에 1행에서는 아무런 문제가 발생하지 않는 것이다. ( 1행은 "char c1 = 66;" 이라는 평범한 초기화 식이 된다.) 반면에 3행에서는 리터럴 간의 연산이 아닌, c..
[JAVA] 이것이 자바다.1-2 JDK = JRE + 컴파일러 등 개발도구 JRE = JVM + 기본 클래스 라이브러리 환경변수 PATH 설정 이유 : 어디에서든 java폴더 안에 있는 명령어를 찾아 실행시키기 위함. PATH에 jdk/bin 위치를 지정해 놓으면 명령어를 찾을 때, bin 폴더 안에서 찾을 수 있다. 주석 단일 행 주석(행 주석) // 여러 행 주석(범위 주석) /* ~ */ 주석에 들어갈 내용 : 작성자, 작성일과 시간, 프록램의 버전과 변경 이력, 주요 코드에 대한 설명 이클립스 각 폴더에 대한 설명 .metadata : 사용자가 지정해둔 개발 환경에 대한 속성을 저장. 이클립스 재시작 할 때, 이전 상태 복원할 목적 .bin : 바이트 코드파일을 저장한다. (.class)(이클립스는 소스코드를 작성하고 저장하는 ..
부동소수점수는 왜 0.1을 표현못할까? ++IEEE 754, 부동소수점수와 고정소수점의 차이 ++소수점이하 2진수 변환 ++IEEE 754, 32비트와 64비트의 표현범위/ 소수점 이하 수들을 2진수로 변환하는 방법을 이해하면 쉽다. 소수 부분을 2진수로 변환하기 위해선, 소수 부분이 0이 될때까지 2를 곱하게 된다. 하지만, 정수부분을 변환하는 경우와는 다르게, 소수부분을 변환할 때에는 아무리 곱해도 0이 되지않는 경우가 생긴다. 0.1이 바로 이런 경우인 것이다. 0.1에 아무리 곱해도 소수부분을 없앨수는 없다. 아무리 넓은 범위를 표현할 수 있는 부동소수점수도 결국 표현할 수 있는 범위의 한계가 있다. 따라서 컴퓨터는 0.1을 2진수로 변환하는 중 표현범위의 한계에 다다르면 뒷부분은 날려버린다! double과 float에서의 0.1의 값..