프로퍼티 접근, 필드 직접 접근, 생성자 사용 중에 어떤 방법이 제일 좋나요 ?
미해결
실전! Querydsl
프로퍼티 접근, 필드 직접 접근, 생성자 사용 중에 어떤 방법이 제일 좋나요 ?? @Autowired보다 생성자 주입이 더 좋은 거처럼 더 좋은 방법이 따로 있는건지 궁금합니다 !
- java
- jpa
176만명의 커뮤니티!! 함께 토론해봐요.
미해결
실전! Querydsl
프로퍼티 접근, 필드 직접 접근, 생성자 사용 중에 어떤 방법이 제일 좋나요 ?? @Autowired보다 생성자 주입이 더 좋은 거처럼 더 좋은 방법이 따로 있는건지 궁금합니다 !
미해결
실전! Querydsl
@Test public void distinct() { em.persist(new Member("member1")); em.persist(new Member("member2")); em.persist(new Member("member2")); em.persist(new Member("member5")); List<String> usernames = queryFactory .select(member.username).distinct() .from(member) .fetch(); assertThat(usernames) .containsExactly("member1", "member2", "member3", "member4", "member5"); } 테스트코드 직접 짜본 경험이 별로 없어서 그런데 이렇게 짜면 되는걸까요 ...?
미해결
자바 ORM 표준 JPA 프로그래밍 - 기본편
@OneToMany @JoinColumn(name = "MEMBER_ID") private Order order; @OneToMany @JoinColumn(name = "MEMBER_ID") private List<Order> orders; 두개가 무슨 차이가 있는지 궁금합니다. 일대다 관계라면 컬렉션을 안써도 되지 않나요?
미해결
자바 ORM 표준 JPA 프로그래밍 - 기본편
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요 강의 영상을 보면서 따라 해보려는 중 인대 실제 프로젝트 생성부터 의존성 파일 작성 시 버전이 완전히 다른 것 같아 도움 글 올립니다. 강의 자료에는 version: 1.0.0을 사용하라고 나와 있지만 해당 버전으로 생성이 불가능 하여 최신 버전으로 프로젝트를 생성했습니다. 그에 따라서 강의자료를 복붙 할 때도 혹시 몰라 현재 설치한 h2 데이터베이스 버전과 Hibernate 최신 버전으로 맞추었습니다. 이후 강의 자료에서 /META-INF/persistence.xml를 생성 하라고 하여 따라 하였습니다. 하지만 프로젝트 버전도 다르고 하여서 인지 이후 따라하기 실습 중 진행이 되지 않아 질문 글 올리게 되었습니다.
미해결
자바 ORM 표준 JPA 프로그래밍 - 기본편
public static void main(String[] args) { Integer a = Integer.valueOf(10); Integer b = a; a = 20; System.out.println("a = " + a); System.out.println("b = " + b); } =======출력값 ======== a = 20 b = 10 이렇게 하면 값이 변경되는데 PPT에서 변경X라는 말이 무슨 말일까요 ?
해결됨
실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
MemberReposiotry처럼 OrderRepository도 JpaRepository를 사용하여 변경해봤습니다. 근데 여기서 기존의 검색 기능을 담당하던 findAllByString의 메서드를 구현함에 있어서 오류가 발생하여 질문드립니다. 기존과 같이 OrderSearch를 이용하여 작성하고 싶어서 findALlByMemberName으로 OrderSearch의 필드인 MemberName을 가져오고 싶었으나 타입 불일치로 오류가 발생합니다. 기존의 Service와 Controller의 변경 없이 Repository만으로 해결하고 싶은데 어떻게 작성해야 할까요? findAllByString은 동적쿼리라서 JpaRepsitory의 기능으로 해결하기엔 한계가 있나요?
미해결
자바 ORM 표준 JPA 프로그래밍 - 기본편
Member와 Team을 예로 생각했을 때 즉시로딩 -> Member만 필요해도 Team과 쿼리문이 같이 나감 지연로딩 -> Member만 불러오고, Team은 프록시 객체로 불러와서, Team이 필요할 때 영속성 컨텍스트에 연결을 요청하고 요청 쿼리문이 나가는 것이 맞나요 ? Member.getTeam().getName()을 1번 수행한다고 했을 때 즉시로딩 (Member + Team 쿼리문 같이)의 성능이 지연로딩 ( Member 쿼리문 따로, Team 쿼리문 따로)보다는 좋지만 강의에서 나온 여러가지 문제로 웬만해서는 지연로딩을 사용하는 것이 더 좋다. 이것이 맞나요?
미해결
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요 강의를 진행하던 중, 테스트를 실행하게 되면 에러가 나서 찾아보았지만 해결하지 못하였습니다ㅜㅜ 또한, ' MemberRepositoryTest.java ' 파일에 'Long savedId = MemberRepository.save (member);' 작성 중, save()에 에러가 나서 ' MemberRepository.java ' 파일에 'EntityManager em' 구문과 'save()' 메서드에 static을 추가한 상황입니다.. 스프링 부트의 버전은 3.0.6이고 h2 database의 버전은 2.1.214입니다! 구글 드라이브에 업로드할테니 확인 부탁드립니다! 감사합니다!
해결됨
실전! 스프링 데이터 JPA
강의자료 27페이지에 사진이랑 구조가 약간 바뀐거 같아요. 현재 저는 스프링 3.0.6에 Java 17을 사용하고 있습니다. JpaRepository는 ListCrudRepository<T, ID>, ListPagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T>를 상속하고 있어요 ListPagingAndSortingRepository는 결국 강의에서 말씀하신 PagingAndSortingRepository를 상속하네요. 큰 틀에서 이해하는데는 문제없었습니다! 좋은 강의 감사합니다.
미해결
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요 현재 spring boot 3.0.6 버전으로 생성해서 진행중인데 h2 database는 1.4.199 버전을 사용해도 되는건가요? 현재 설치되어 있는 h2는 2.1.214 버전입니다!
해결됨
실전! 스프링 데이터 JPA
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 질문1. 마지막 bulkUpdate 테스트는 통과되었으나 member5 코드 부분에서 sout 이찍히지 않습니다. 어떤 문제일까요 ? @Test public void bulkUpdate() { memberRepository.save(new Member("member1", 10)); memberRepository.save(new Member("member2", 19)); memberRepository.save(new Member("member3", 20)); memberRepository.save(new Member("member4", 21)); memberRepository.save(new Member("member5", 40)); int resultCount = memberRepository.bulkAgePlus(20); em.clear(); List<Member> result = memberRepository.findListByUsername("member5"); Member member5 = result.get(0); System.out.println("member5 = " + member5); Assertions.assertThat(resultCount).isEqualTo(3); } 질문2. 첫번째 코드보시면 아시겠지만 Member member5 = result.get(0); 여기에서 get(0)은 인덱스를 의미하는건가요??아니면 db의첫번째 로우를 가져오겠다는 건가요??
미해결
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요 강의를 듣던 중 에러가 발생하여 질문을 남깁니다. 7분정도에 메인 어플리케이션을 실행하던 중 에러가 발생했는데요 에러는 다음과 같습니다. 디비에도 OrderItem이 생성되지 않았습니다. 깃허브 주소입니다. https://github.com/heechanCho/jpashop 도움주시면 감사하겠습니다.
미해결
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
안녕하세요! 지난번 질문에 답 주셔서 감사합니다. 다름이 아니라 제 pc에 mysql이 설치되어 있어서 강의대로 mysql로 사용하려고 합니다. 그런데 비밀번호가 생각 나지 않아서, 인터넷에 나와있는 방법으로 하려고 했는데, 비밀번호 초기화 까지는 했는데 그다음으로 넘어가질 않아서요..ㅠㅠ 암호를 설정하려면 cmd창에 mysql -r root -p 를 입력한 후 password가 나왔을 때 엔터만 쳐도 mysql로 접속이 된다고 하면서, 거기서 비밀번호를 설정하면 된다고 합니다. 하지만 저는 여기 나온 에러만 계속 나와서...비밀번호 설정을 못하고 있습니다. 제발 방법 좀 알려주세요ㅠㅠ
미해결
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
<BookForm> @Getter @Setter public class BookForm { private Long id; private String name; private int price; private int stockQuantity; private String author; private String isbn; } <Controller> @PostMapping("/items/new") public String create(BookForm form){ Book book = new Book(); book.setName(form.getName()); book.setPrice(form.getPrice()); book.setStockQuantity(form.getStockQuantity()); book.setAuthor(form.getAuthor()); book.setIsbn(form.getIsbn()); itemService.saveItem(book); return "redirect:/"; } <Service> @Service @RequiredArgsConstructor @Transactional(readOnly = true) public class ItemService { private final ItemRepository itemRepository; public void saveItem(Item item){ itemRepository.save(item); } public Item findOne(Long itemId){ return itemRepository.findOne(itemId); } public List<Item> findAll(){ return itemRepository.findAll(); } } <Repository> @Repository @RequiredArgsConstructor @Slf4j public class ItemRepository { private final EntityManager em; public void save(Item item){ if(item.getId() == null){ log.info("item={}", item); em.persist(item); //신규등록 }else{ em.merge(item); } } public Item findOne(Long id){ return em.find(Item.class, id); } public List<Item> findAll(){ return em.createQuery("select i from Item i", Item.class) .getResultList(); } } <Log> 2023-04-21 15:08:16.380 INFO 7536 --- [nio-8080-exec-2] j.jpashop2.repository.ItemRepository : item=Book(author=qwe, isbn=1234) <Test> 로그에 찍히는거 보면 값이 다 전달이 되고 테스트 코드에서도 성공으로 떠서 저장이 되야 될거 같은데 h2 db에 가면 값이 저장이 안되어 있네요 아예 디비랑 연동이 안되나 싶었는데 멤버는 정상적으로 회원가입이 되는데 아이템만 저장이 안되네요 뭐가 문제일까요... ddl-auto 는 create로 되어있구요 h2 db 버전은 1.4.2 입니다
해결됨
실전! Querydsl
cafe24에 프로젝트를 배포하기 위해서는 ROOT.war파일을 생성해야했습니다. 프로젝트를 만들 때 jar를 선택하고 생성해버려서 war로 변경해야했고, 이는 구글링을 통해 해결 하였습니다. 하지만 ROOT.war파일을 압축 해제하고 보니 Q클래스들이 하나도 없었습니다. 아마 build > generated > querydsl 경로에 Q클래스들이 있어서 그런게 아닐까 생각하고 있습니다. 어떻게 해결하면 좋을까요?ㅠㅠ build.gradle코드는 아래와 같습니다. plugins { id 'org.springframework.boot' version '2.2.2.RELEASE' id 'io.spring.dependency-management' version '1.0.8.RELEASE' //querydsl 추가 id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" id 'java' id 'war' } group = 'study' version = '0.0.1-SNAPSHOT' sourceCompatibility = '8' configurations { compileOnly { extendsFrom annotationProcessor } developmentOnly runtimeClasspath { extendsFrom developmentOnly } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect' implementation 'org.springframework.boot:spring-boot-starter-web' //war파일로 배포하기위한 설정 providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat' //스프링부트에서 validation을 사용하기 위한 코드 implementation 'org.springframework.boot:spring-boot-starter-validation' // json 파싱 implementation 'com.googlecode.json-simple:json-simple:1.1.1' developmentOnly("org.springframework.boot:spring-boot-devtools") compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' runtimeOnly 'org.mariadb.jdbc:mariadb-java-client:2.7.0' runtimeOnly("mysql:mysql-connector-java") annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' //model mapper implementation 'org.modelmapper:modelmapper:2.4.2' // lombok을 테스트 환경에서도 사용 testCompileOnly 'org.projectlombok:lombok' testAnnotationProcessor 'org.projectlombok:lombok' // 이메일 전송 implementation 'org.springframework.boot:spring-boot-starter-mail' //파라미터가 적용된 쿼리문 // implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.8' //querydsl 추가 implementation 'com.querydsl:querydsl-jpa' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation('org.springframework.boot:spring-boot-starter-test') { exclude group: 'org.junit.vintage', module: 'junit-vintage-engine' } //테스트코드 작성시 entityManagerFActory에러 때문에추가 implementation group: 'org.javassist', name: 'javassist', version: '3.15.0-GA' } test { useJUnitPlatform() } //querydsl 추가 시작 def querydslDir = "$buildDir/generated/querydsl" querydsl { jpa = true querydslSourcesDir = querydslDir } sourceSets { main.java.srcDir querydslDir } configurations { querydsl.extendsFrom compileClasspath } compileQuerydsl { options.annotationProcessorPath = configurations.querydsl } //querydsl 추가 끝
미해결
자바 ORM 표준 JPA 프로그래밍 - 기본편
ORDERS와 ORDER_ITEM의 관계는 하나의 주문 안에, 주문된 여러가지 아이템(book,album,movie등)이 있을 수 있기 때문에 1:N인 것 이 맞나요 ? OrderItem과 Item의 관계가 잘 이해 가지 않아서 찾아보다가 https://www.inflearn.com/course/lecture?courseSlug=ORM-JPA-Basic&unitId=21699&category=questionDetail&tab=community&q=805804 이 답변을 보고 헷갈리는 부분이 있는데요. Book을 n번 주문할 수 있기 때문에 1:N이라고 하셨는데 이 말은 즉, Book이라는 아이템 안에서도 주문된 여러가지 책(일본 책, 독일 책, 한국책) 이 있을 수 있기 때문에 1:N이라는 말일까요? 어떤 Member가 어떤 주문을 했는지 Order를 참고하는 것과 어떤 Order가 무엇을 구매했는지 Order_Item을 참고하는 것이 같은 맥락이라고 생각하는데 전자는 잘못된 설계고 후자는 괜찮은 설계인 이유는 무엇일까요?
미해결
자바 ORM 표준 JPA 프로그래밍 - 기본편
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 여기에 질문 내용을 남겨주세요. 기존 강의에서는 H2 데이터 베이스로 연동하는 영상으로 나와 있는데 ,저는 MariaDB로 변경해서 사용을 하고 싶어서 MariaDB 설정으로 변경해서 H2 콘솔을 실행을 시키니깐 해당 오류가 발생합니다 제가 수정한 부분 persistence.xml , application.properties , pom.xml MariaDB 관련 설정으로 수정을 해줬습니다.... H2 콘솔에서 저장한설정 - >Generic MariaDB 변경해줬고 접속 url을 jdbc:mariadb:// localhost:3306/{제 DB명} 입력해서 접속을 했었습니다만, 아래의 오류가 발생한 상황입니다 Class "org.mariadb.jdbc.Driver" not found [90086-214]
미해결
자바 ORM 표준 JPA 프로그래밍 - 기본편
public class Team2 { @Id @GeneratedValue @Column(name = "TEAM_ID") private int id; private String name; @OneToMany @JoinColumn(name = "MEMBER_ID") private List<Member> members = new ArrayList<>(); } public class Member2 { @Id @GeneratedValue() private Long id; @Column(name = "name") private String username; @ManyToOne(mappedBy = "members") private Team team; } 강의를 듣다가 외래키를 Team에 두면 안되는 것인가? 하고 혼자 코드를 작성해보았는데요. @ManyToOne은 mappedBy옵션을 지원하지 않는 걸로 봐서 1:N에서 N쪽이 외래키가 있어야하고, 연관관계의 주인이 되어야하는 것 같은데 연관관계의 주인이 되는 외래키는 어떤 방식으로 설정해주나요 ?
미해결
자바 ORM 표준 JPA 프로그래밍 - 기본편
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. JPA에는 두가지 데이터 타입 (엔티티,값타입)이 존재한다고 하셧는데 값 타입의 설명을 들어보면 뭔가 자바에서의 primitive type이나 객체들의 이야기랑 많이 비슷한거 같아서요 , 제가 당장 이해한 바로는 엔티티 객체 안에 여러 값타입이 존재한다 라고 생각이 되는데 제가 올바르게 이해하고 있는지 궁금합니다..
미해결
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
안녕하세요. 강의에서 보여주셨던 것과는 start.spring.io 의 화면이 달라서, 강의를 따라가기 위해서는 어떻게 선택해야 하는지 여쭙고자 합니다. Project에서는 Gradle-Groovy를 사용하면 되는건가요? Spring Boot는 3.0.5로 해야할까요 2.7.10으로 해야 할까요 java버전은 17이 좋을까요 11이 좋을까요? 버전에 따라 dependencies가 먹히거나 안먹히거나 하는거 같습니다. 답변에 미리 감사합니다.