![Thumbnail](https://cdn.inflearn.com/public/courses/324109/course_cover/161476f8-f0b7-4b04-b293-ce648c2ea445/kyh_jsp.png)
월 18,150원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
createQuery시 쿼리가 날라가지 않고 rollback이 되는 문제
package hellojpa; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.Persistence; import java.util.List; public class JpaMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); try{ List<Member> result = em.createQuery("select m from Member", Member.class) .getResultList(); for(Member member : result){ System.out.println("member.name = " + member.getName()); } tx.commit(); } catch (Exception e){ tx.rollback(); //쿼리가 전송되지 않을때, 다음과 같이 rollback을 시킨다 } finally { em.close(); } emf.close(); } } 다음과 같이 코드를 강좌와 똑같이 따라 했는데, print문과 쿼리가 나오지 않아 코드 결과물을 잘 뜯어보니, 21:56:20.511 [main] DEBUG org.hibernate.engine.transaction.internal.TransactionImpl - rolling back ... 21:56:20.517 [main] DEBUG org.hibernate.internal.SessionFactoryImpl - HHH000031: Closing 이렇게 뜨는 것을 알 수 있었습니다. except문으로 가서 rollback된다는 의미인것 같은데 어디가 문제인지 알 수 있을까요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
시퀀스 전략에 대해 질문이 있습니다
엔티티를 만들어서 @Id 와 @GeneratedValue 를 붙여주면 이게 자동으로 시퀀스로 등록되어 db에서 관리해주는 거고, 테이블 전략보다는 많이 쓴다고 하셨는데요. 테이블 전략 역시 db에서 seq를 저장해서 증가하는 방식을 사용하는 것 같은데 두 가지가 큰 차이가 있나요? 결국 둘다 db를 사용하는 것 같은데 성능적으로 무슨 차이인지 궁금합니다. 혹시나 제가 뭔가를 잘못 이해하거나 빠뜨려서 생각한 부분이 있다면 지적해주시면 감사드려요!
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
메이븐으로 프로젝트를 만들때 강의처럼 만들어지지가 않습니다
안녕하세요. 이번에 새로 다시 프로젝트를 만들어 실행해보려고 강의에서 보여주신 대로 메이븐으로 만들어봤는데 강사님께서 만드시는 화면과 제가 만드는 화면이 다르더라고요. Archetype 과 version 을 필수로 입력해야 넘어가지던데 여기에 뭘 추가해줘야하나요? 혹시 몰라 jpa-maven-archetype 을 선택해봤는데 아래처럼 에러가 납니다. 자바 8로도 해봤는데 똑같은 증상을 보입니다!
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
영속성의 대한 질문입니다.
안녕하세요 항상 좋은 강의 만들어 주셔서 정말 감사합니다. 영속성에 대해 궁금한 것이 생겨 질문을 남기게 되었습니다. 컨트롤러, 서비스, 리파지토리의 계층이 있다고 할 때, 먼저 컨트롤러에서 유저를 조회한 후, 조회된 유저를 다른서비스 계층으로 보내서 로직을 처리하려고 하는데 해당 유저 객체를 영속성컨텍스트로 관리해주고싶으면 em.persist로 직접넣어줘야하나요 ? 읽어주셔서 감사합니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
3분53초쯤(콘솔화면)
select member0_.username as col_0_0_, 'HELLO' as col_1_0_, 1 as col_2_0_ from Member member0_ where member0_.type='USER' 여기에서 1 as col_2_0_가 나오는데 1이 의미하는게 무엇인가요?
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
GenerationType.SEQUENCE allocationSize 질문
시퀀스 증가값이 50이라고 가정했을때 최초실행시 시퀀스를 두번 불러와서 1과 51을 가져오는것으로 이해했습니다. 이때 만약 allocationSize = 1 이여도 최초실행했을때는 1~51까지 insert를 모았다가 보낸다고 생각해도 될까요? 최초인 1~51이 지난후에는 52,102,152,,,로 한개씩 insert로 보낸다고 생각이들어서요. 즉 최초 실행시 allocationSize가 시퀀스 증가값보다 작다면 jpa는 1부터 1+[시퀀스증가값]을 사용할 수 있기때문에 allocationSize보다 더 많은 값인 1부터 1+[시퀀스증가값]만큼 보낼 수 있다 라고 이해해도 될까요?
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
연관관계 편의 메서드 관련 질문입니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] 양방향 연관관계 대해 이해가 잘 안되서 질문 드립니다. 양방향 연관관계는 연관관계 주인 생성 시 자식 객체에 값을 동시에 넣어 생성할 때 편하게 쓰려고 만든게 맞습니까? 만약 연관관계 주인을 생성하고 굳이 동시에 값을 넣어주지 않는 상황이라면 양방향 연관관계는 안쓰는건가요? 예를 들어 게시물의 추천이나 댓글 같은 경우 게시물이 작성될 때 댓글을 쓸 상황도 없고 쓸 이유도 없지만 멤버의 팀 같은 경우에는 멤버 생성 시 바로 어떤 팀에 들어갈 수도 있기때문에 사용하는거라 이해해도 괜찮을까요? 추가로 혹시 실무에서는 양방향 연관관계랑 단방향 연관관계를 사용하는 비율이 어느정도 될까요? 두서없이 질문해서 죄송합니다 글이 이해가 안되신다면 댓글 남겨주시면 감사하겠습니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
임베디드 타입 내에서 엔티티 타입을 지정할 수 있다고 하셨는데, 정확한 방법이 궁금합니다.
1. MailMan이라는 Entity를 만들었습니다. package hellojpa; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @Entity public class MailMan { @Id @GeneratedValue private Long id; } 2. Address에서 해당 Entity를 사용해보기로 했습니다. package hellojpa; import javax.persistence.*; @Embeddable // 임베디드 타입, 해당 타입을 쓰는 엔티티의 DB 테이블에는 Address 로 들어가는 게 아닌, 각자의 필드가 스키마로 들어가게 된다. 임베디드 타입은 엔티티의 값일 뿐이다! public class Address { private String city; private String street; @Column(name = "ZIPCODE") private String zipcode; @OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "MY_MAILMAN_PK", insertable = false, updatable = false) private MailMan mailMan; // 임베디드 타입에서 엔티티 타입을 들고 있을 수 있다! 근데 안되네..? public Address() { } ...이하 생략 3. insertable = false, updatable = false 를 해제하면 코드가 돌지 않습니다. 4. 해당 설정을 제외하고서도 돌릴 수 있는 방법이 있을 것 같은데, 제가 어떠한 부분을 빼먹은건지 알 수 있을까요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
25분20초쯤
findMember.getAddressHistory().remove(new Address("old1", "street", "10000")); 이 부분을 equals와 hashcode를 오버라이딩한 덕분에 new를 써도 같은 참조(주소)값으로 인지하고 내용물이 같은 객체를 지우게 되는건가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
persistence.createEntityManagerFactory 부분 오류
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용] 강의 그대로 따라가여 실행을 해봤는데 이러한 오류가 발생합니다. 구글에 찾아봤지만 해결방법이 나오지 않아서 질문드립니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
JPA 사용시 DB 설계 관련 질문입니다!
안녕하세요 강사님. 보통의 프로젝트를 할 경우 DB 테이블 설계를 먼저 하는것으로 알고있는데요. JPA를 사용할 시에 테이블을 먼저 설계하고 그에 맞춰 엔티티를 작성하는지, 또는 먼저 엔티티를 중심으로 설계하는지 궁금합니다! 감사합니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
DDD 와 엔티티 매핑
안녕하세요. JPA를 사용해서 엔티티 매핑할 때 DDD에서 말하는 엔티티, 즉 도메인 객체를 바로 매핑하시나요? 아니면 JPA 엔티티를 도메인 객체와는 별개로 만들어서 매핑하시나요? 예제로 가르쳐주시는 건 바로 매핑하시는데, 혹시 실무에선 또 다른지 궁금해서 질문 드립니다.
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
registerFunction() 쓸수 없음
1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]registerFunction()을 쓸수 없습니다. 참고로 하이버네이트는 6.0.0.Alpha 7버전을 쓰고 있구요. 혹시라해서 버전을 5.6.10.Final로 바꾸면 쓸수 있더라구요. JPA공부하면서 6.0.0.Alpha 7버전을 쭉 쓰고 있는데 그런데 문제는 한 번도 안 생겼어요. 이 부분에서 궁금한점은 요즘에 JPAL함수 이렇게 사용 안 하시나요? 버전별H2Dialect클래스에 들어가면 이부분이 많이 바꿔있더라구요. 그래서 실무에서는 보통 final버전만 쓰는 건가요? 물론 강의는 2019년 기준이라서 그때는 alpha버전 없지만. 햇갈리네요^^. 저는 최신버전이면 쓰는 것이 좋을것 같아서. 그리고 alpha버전은 도데체 정식 버전인가요. 아니면 테스트중인 버전인가요.
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
양방향 연관관계에서의 remove 과정..
양방향 연관관계에서 연관관계 편의 메소드 라는 것을 만들어서 양쪽에 값을 모두 넣어주고 persist를 했었는데 반대로 엔티티를 삭제할때에도 삭제와 관련된 편의메소드를 생성해서 연관된 엔티티 (fk)에 null을 넣어주고 해당 엔티티를 em.remove 해야 하나요?? ex) member : post = 1 : n ==> member 삭제 시, post에 members list 에 있는 해당 member를 null값으로 설정하는 메소드
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
JPQL 로 작성한 문법 테스트 코드로 작성해 볼 수 있을까요?
안녕하세요. JPQL 로 쿼리를 작성하고 실제 데이터가 들어가는지 보려고 합니다. 우선, main 함수에서 직접 넣는거는 되는 것을 확인했습니다. 그리고 제가 해보고 싶었던거는 테스트 코드로 작성해보는 것이였습니다. 그런데 Bean을 못찾는다는 에러가 발생했습니다. 구글링도 해보고 빈 등록을 다양하게 해보면서 접근법을 다르게도 해봤는데 해결이 안되네요 ㅠㅠ 혹시 제 코드를 보시고 어디에 문제가 있는지 알 수 있을까요? 제가 작성한 코드입니다. [ JPQLRepository ] @Transactional @Repository public class JPQLMemberRepository implements MemberRepository{ @PersistenceContext private final EntityManager em; @Autowired public JPQLMemberRepository(EntityManager em) { this.em = em; } public EntityTransaction getTx() { return em.getTransaction(); } public Member save(Member member) { em.persist(member); return member; } public void emClose() { em.close(); } @Override public Optional<Member> findByid(Long id) { return Optional.empty(); } @Override public Optional<Member> findByname(String name) { List<Member> result = em.createQuery( "SELECT m FROM Member m WHERE m.name = :name", Member.class ).setParameter("name", name).getResultList(); System.out.println("--------------------------------"); for (Member i : result) { System.out.println("member:" + i); } System.out.println("--------------------------------"); return result.stream().findAny(); } } [ SpringConfig ] @Configuration public class SpringConfig { @Bean public EntityManagerFactory getEnf() { EntityManagerFactory emf = Persistence.createEntityManagerFactory("5xik"); return emf; } @Bean public EntityManager getEm() { return getEnf().createEntityManager(); } @Bean public MemberRepository memberRepository() { return new JPQLMemberRepository(getEm()); } } [ TestCode ] @SpringBootTest @Transactional class JPQLMemberRepositoryTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfig.class); MemberRepository repository = ac.getBean("memberRepository",JPQLMemberRepository.class); EntityTransaction tx = repository.getTx(); @Test @Commit void insertData() { tx.begin(); try{ Member member = new Member(); member.setName("sungjun"); member.setPhonenumber("010"); repository.save(member); Optional<Member> result = repository.findByname(member.getName()); Assertions.assertThat(result).isEqualTo(member); tx.commit(); } catch (Exception e){ tx.rollback(); } finally { //repository.emClose(); } //ac.close(); } } 그리고 아직 close를 하는 부분은 구현을 안해놔서주석처리를 해놨습니다 !감사합니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
17분25초쯤
mappedby="team" 아래에 있는 members랑 addMember메서드 아래에있는 members 둘이 서로 같은데 그전에 team.getMembers().add(member);를 할때 getMembers에서 members가 mappedby 읽기전용이라서 안된다고 하셨는데 그러면 addMember메서드에 있는 members도 읽기전용이라 add를 할때 적용이 안돼야 하는거 아닌가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
1차 캐시 조회중 오류 문의드립니다.
1차 캐시 조회 실습을 따라 하던 중 다음과 같은 오류 메세지와 함께 구하고자 하는 system.out,println 값이 나오지 않아 문의드립니다. 무엇 때문에 발생하는 오류인지 알 수 있을까요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
갑자기 build error가 나서 질문 드립니다.
갑자기 build 시에 이런 내용의 에러가 발생했습니다. "C:\Program Files\Java\jdk-11.0.15.1\bin\java.exe" -Dmaven.multiModuleProjectDirectory=C:\Users\sspure123\Desktop\jpa-basic "-Dmaven.home=C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2022.1.3\plugins\maven\lib\maven3" "-Dclassworlds.conf=C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2022.1.3\plugins\maven\lib\maven3\bin\m2.conf" "-Dmaven.ext.class.path=C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2022.1.3\plugins\maven\lib\maven-event-listener.jar" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2022.1.3\lib\idea_rt.jar=64655:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2022.1.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2022.1.3\plugins\maven\lib\maven3\boot\plexus-classworlds-2.6.0.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2022.1.3\plugins\maven\lib\maven3\boot\plexus-classworlds.license" org.codehaus.classworlds.Launcher -Didea.version=2022.1.3[INFO] Scanning for projects...[WARNING] [WARNING] Some problems were encountered while building the effective model for jpa-basic:ex1-hello-jpa:jar:1.0.0[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-compiler-plugin is missing. @ line 13, column 21[WARNING] [WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.[WARNING] [WARNING] For this reason, future Maven versions might no longer support building such malformed projects.[WARNING] [INFO] ------------------------------------------------------------------------[INFO] BUILD FAILURE[INFO] ------------------------------------------------------------------------[INFO] Total time: 0.180 s[INFO] Finished at: 2022-07-28T22:29:49+09:00[INFO] ------------------------------------------------------------------------[ERROR] No goals have been specified for this build. You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>. Available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-clean, clean, post-clean, pre-site, site, post-site, site-deploy. -> [Help 1][ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.[ERROR] Re-run Maven using the -X switch to enable full debug logging.[ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles:[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/NoGoalSpecifiedException Process finished with exit code 1 구글링을 통해 검색하여, maven 문제라는 것을 알았고, pom.xml을 통해 다음과 같은 코드를 추가하였는데도 문제가 해결되지 않았습니다ㅠㅠ <pluginRepositories> <pluginRepository> <id>central</id> <name>Central Repository</name> <url>https://repo.maven.apache.org/maven2</url> <layout>default</layout> <snapshots> <enabled>false</enabled> </snapshots> <releases> <updatePolicy>never</updatePolicy> </releases> </pluginRepository></pluginRepositories><repositories> <repository> <id>central</id> <name>Central Repository</name> <url>https://repo.maven.apache.org/maven2</url> <layout>default</layout> <snapshots> <enabled>false</enabled> </snapshots> </repository></repositories> 어떻게 해결해야 할까요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
21분 28초 실행
코드를 실행 하게 되면 맨 위부터 순차적으로 create sequence hibernate_sequence start with 1 increment by 1 call next value for hibernate_sequence call next value for hibernate_sequence 이 코드들의 실행 결과가 team_id에 1이 들어가고, member_id 2가 들어가게 되는거 같은데 하나의 시퀀스를 서로가 같이쓰게 되는형태인거죠? 만약에 그렇다면 따로 시퀀스를 쓰게 하려면 어떻게 해야하나요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
설계
실무에서 테이블 설계와 엔티티 설계,매핑 이런 작업은 개발자가 직접하는건가요?