스프링 데이터 JPA

스프링 데이터 JPA

(45개의 수강평)

960명의 수강생
88,000원
지식공유자 · 백기선
44회 수업 · 총 8시간 53분 수업
평생 무제한 시청
수료증 발급 강좌
수강 난이도 '활용'
Accidently Woo 프로필

오타)40. 스프링 데이터 JPA:Query by Example Accidently Woo 11일 전

단점 2번째 항목에서

조건이 제한적이다. 문자열은 starts/contains/ends/regex 가 가능하고 그밖에 propery는 값이 정확히 일치해야 한다.

라고 되어있는데 propery-> property로 이해하면 되는거죠?

1
엄정재 프로필

6:50에 Post post = byId.get(); <- 72번째 줄 엄정재 12일 전

6:05부터 편집되서 갑자기 생긴건가요~?

1
엄정재 프로필

SimpleMyRepository의 extends를 수정하지 않았는데 테스트가 성공됩니다; 엄정재 14일 전

https://blog.naver.com/kk920106/221666842622

강의 들으면서 정리한 포스팅입니다.

맨 아래부분에 오류내용 작성해놓았습니다.

감사합니다.

0
aab5555 프로필

안녕하세요. Value타입 관련해서 질문드립니당. aab5555 18일 전

안녕하세요. 혹시 composite타입을 따로 분리해서 사용하는 이유를 간단하게라도 알 수 있을까요? Account의 테이블로 들어오는 형태라면 Account테이블에 만들면 되지 않을까 라는 생각때문에.. 

1
박재현 LARS 프로필

save시에 createUser 박재현 LARS 20일 전

Entity에 createUser 라는 변수가 있습니다.

save 시에 insert 또는 update가 되는데

update로 날라간경우에 createUser 까지도 계속해서 업데이트 할려고 합니다.

createUser는 DB에 최초로 insert되었을시 한번만 값이 들어가야 하는데 JPA는 update 할시 entity에 정의되어있으면 create_user 컬럼을 계속 업데이트 치네요

업데이트시에 createUser 컬럼을 빼는 업데이트 치는 방법이 궁금합니다.

1
건후레이크 프로필

JPA에서 자동으로 만들어주는 테이블을 실제 프로젝트에서 사용해도 상관없나요? 건후레이크 20일 전

안녕하세요. 백기선님

JPA 수업 잘 듣고있습니다~!

다름이아니라 JPA를 이용해서 테이블 생성하는 부분에 질문이 있습니다.

spring.jpa.hibernate.ddl-auto=create 설정을 한다면 테이블을 자동으로 만들어주는데, 이렇게 JPA를 사용해서 자동으로 생성된 테이블을 이용해도 상관없는지 궁금합니다.

예전에 JPA를 학습하기전에 테이블은 직접 생성하고, 데이터만 관리하는게 좋다고 얼핏 들은 것 같은데 해당 내용이 확실하지 않아서 여쭤봅니다!

1
정재훈 프로필

Repository 관련 질문 정재훈 22일 전

2개 이상의 테이블 join 해서 페이징 기능을 처리하는 경우

어떻게 구현해야 할까요?

Repository 를 만들어서 Pagable 파라미터로 받아서 처리를 해야 될것 같은데..

어떤 방법이 있을까요?

1
kim 프로필

Id 매핑 질문입니다 kim 27일 전

A라는 엔터티에

@Id

private long id

Private string aCode

가 있을 때 전 id가 아닌 aCode를 키갖ㅅ으로 매핑하고 싶은데 가능한가요? Id는 자동생성되는 값이고, aCode느느제가 직접 입력하는 값입니다

1
PureDouble 프로필

lazy loading 관련 response 관리 PureDouble 28일 전

안녕하세요. 좋은 강좌 열어주셔서 감사 드립니다.

lazy loading으로 관계를 선언 하였을 때,

서비스 레이어에서는 사용 할 필요가 없지만 client에 Many쪽의 데이터가 필요하여 응답에 추가시키려면,

프로퍼티를 읽어줘서 lazy loading을 발생시켜서 가져오는 방법 말고는 없을까요?

뭔가 아름답지 않게 느껴져서 다른 방법이 있지 않을까 찾아보다가 아래 글을 보았습니다.

제가 질문하려는 내용과 같은 내용으로 보이는데 100% 만족스럽지는 않아서 질문 드리게 되었습니다.

https://okky.kr/article/328445?note=1069683

현재는 요청이 오면 "A" type으로 조회된 데이터를 "A" type의 Dto 인스턴스를 생성 한 뒤에 ModelMapper로 변환시켜 리턴해주고 있으나, 이것도 딱히 만족스럽지는 않네요.

혹시 좋은 의견이 있으시면 알려주시면 감사하겠습니다.

인프런 강좌 감사히 잘 보고 있습니다.

고생 많으시겠지만, 앞으로도 강좌 많이 만들어 주세요! 

1
kim 프로필

Select 해올 때 질문입니다 kim 1달 전

Db에서 가져오는 건수 100만건이면 한번에 다 불러오면 시간이 오래 걸릴 것 같은데 혹시 끊어서도 가져올 수 있나요?

3
kim 프로필

2가지 질문이 있습니다. kim 1달 전

1. A라는 유저와 B라는 유저가 같은 테이블에서 같은 컬럼값 1을 가지고 왔습니다.

A는 1에 1을 더해서 2를 저장하려고 하고,

B는 1이 2가되는 것을 모르고 1에 2를 더해서 3을 만들려고 합니다. 

이렇게 서로가 값을 가지고 있을 때 락을 걸어줘야할 거 은데 JPA로는 어떤 방법이 있을까요?

2. 테이블에서 값이 1 -> 2를 참조하고, 2가 3을 참조하면 3 , 2, 1의 순서로 지울수가 있습니다. 그런데 유저가 실수로 3->1로 참조하게되면 1 , 2 , 3서로가 삭제가 될 수 없는 상태가 되는데 JPA로는 어떤 방식으로 막을 수 있을까여?

p/s백기선님의 인프런 강의 모두 결재한만큼 굉장히 도움이 되고 있습니다. 위에 대한 답변 기다리겠습니다 ㅎㅎ

1
Homin Ahn 프로필

Entity 특정 컬럼을 환경에 따라 설정할수 있을까요?.. Homin Ahn 1달 전

같은 서비스를 여러 나라에서 서비스중입니다. 
소스는 같이 사용하나 서버나 db는 다른환경에서 운영중입니다. 
타나라에서만 제공할 서비스에 컬럼을 계속해서 추가하는데
한국db테이블에도 불필요한 컬럼을 계속 추가해줘야하는 이슈가
생기고 있습니다. 혹시 이럴경우에  쉽게 해결할수 있는 방법이 있을까요? 

1
J 프로필

relation "hibernate_sequence" does not exist J 1달 전

안녕하세요.

JPA 프로그래밍 1. 프로젝트 세팅의 내용을 mac에서 실습하던 중 다음과 같은 에러가 있었습니다.

ERROR: relation "hibernate_sequence" does not exist

 

다음처럼

@GeneratedValue(strategy=GenerationType.IDENTITY)

로 변경하면 에러없이 데이터가 들어는 가지만 id에 null이 입력되는데요.

번거로우시겠지만 해결책을 조언해 주실 수 있을까요?

 

4
예상진 프로필

오류가 나는데 이해가 안가요 예상진 2달 전

H2 스코프만 테스트로 바꾸고 테스트를 실행했는데요

Description:

A component required a bean named 'entityManagerFactory' that could not be found.

java.lang.IllegalStateException: Failed to load ApplicationContext

at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:125) ~[spring-test-5.1.9.RELEASE.jar:5.1.9.RELEASE]

at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:108) ~[spring-test-5.1.9.RELEASE.jar:5.1.9.RELEASE]

at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:118) ~[spring-test-5.1.9.RELEASE.jar:5.1.9.RELEASE]

at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83) ~[spring-test-5.1.9.RELEASE.jar:5.1.9.RELEASE]

at org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener.prepareTestInstance(SpringBootDependencyInjectionTestExecutionListener.java:43) ~[spring-boot-test-autoconfigure-2.1.7.RELEASE.jar:2.1.7.RELEASE]

at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:246) ~[spring-test-5.1.9.RELEASE.jar:5.1.9.RELEASE]

at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:227) [spring-test-5.1.9.RELEASE.jar:5.1.9.RELEASE]

at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289) [spring-test-5.1.9.RELEASE.jar:5.1.9.RELEASE]

at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) [junit-4.12.jar:4.12]

at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291) [spring-test-5.1.9.RELEASE.jar:5.1.9.RELEASE]

at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:246) [spring-test-5.1.9.RELEASE.jar:5.1.9.RELEASE]

at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) [spring-test-5.1.9.RELEASE.jar:5.1.9.RELEASE]

at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) [junit-4.12.jar:4.12]

at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) [junit-4.12.jar:4.12]

at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) [junit-4.12.jar:4.12]

at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) [junit-4.12.jar:4.12]

at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) [junit-4.12.jar:4.12]

at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) [spring-test-5.1.9.RELEASE.jar:5.1.9.RELEASE]

at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) [spring-test-5.1.9.RELEASE.jar:5.1.9.RELEASE]

at org.junit.runners.ParentRunner.run(ParentRunner.java:363) [junit-4.12.jar:4.12]

at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190) [spring-test-5.1.9.RELEASE.jar:5.1.9.RELEASE]

at org.junit.runner.JUnitCore.run(JUnitCore.java:137) [junit-4.12.jar:4.12]

at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) [junit-rt.jar:na]

at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47) [junit-rt.jar:na]

at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242) [junit-rt.jar:na]

at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70) [junit-rt.jar:na]

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'postRepository': Cannot create inner bean '(inner bean)#10b3df93' of type [org.springframework.orm.jpa.SharedEntityManagerCreator] while setting bean property 'entityManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#10b3df93': Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' available

at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:361) ~[spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]

at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:131) ~[spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1681) ~[spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1433) ~[spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:592) ~[spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515) ~[spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]

at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) ~[spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]

at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]

at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) ~[spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]

at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]

at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:826) ~[spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]

at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:877) ~[spring-context-5.1.9.RELEASE.jar:5.1.9.RELEASE]

at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549) ~[spring-context-5.1.9.RELEASE.jar:5.1.9.RELEASE]

at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:743) ~[spring-boot-2.1.7.RELEASE.jar:2.1.7.RELEASE]

at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:390) ~[spring-boot-2.1.7.RELEASE.jar:2.1.7.RELEASE]

at org.springframework.boot.SpringApplication.run(SpringApplication.java:312) ~[spring-boot-2.1.7.RELEASE.jar:2.1.7.RELEASE]

at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:120) ~[spring-boot-test-2.1.7.RELEASE.jar:2.1.7.RELEASE]

at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:99) ~[spring-test-5.1.9.RELEASE.jar:5.1.9.RELEASE]

at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:117) ~[spring-test-5.1.9.RELEASE.jar:5.1.9.RELEASE]

... 25 common frames omitted

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#10b3df93': Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' available

at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:314) ~[spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]

at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:110) ~[spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]

at org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:662) ~[spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]

at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:479) ~[spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1321) ~[spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1160) ~[spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) ~[spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515) ~[spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]

at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:346) ~[spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]

... 43 common frames omitted

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' available

at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:771) ~[spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]

at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1221) ~[spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]

at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:294) ~[spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]

at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]

at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:303) ~[spring-beans-5.1.9.RELEASE.jar:5.1.9.RELEASE]

... 51 common frames omitted

 

에러가 발생하는데 메이븐 clean 해도 계속 오류가 나고 원인을 모르겠네요 ㅠㅠ

1
bioleaf 프로필

1:N, N:1 양항뱡으로 정의된 항목 저장 시 문제 bioleaf 2달 전

강의에서 사용 된 user와 study를 예로들어 보자면,

 

두 객체를 새로 생성하여 db에 저장 시 문제가 발생하지 않지만

 

db에 입력된 user를 findById로 불러와서 새로운 study를 저장 하려고 하면

 

 

Caused by: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: me.test.jpatest.vo.User.studies, could not initialize proxy - no Session

at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:602) ~[hibernate-core-5.3.10.Final.jar:5.3.10.Final]

at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:217) ~[hibernate-core-5.3.10.Final.jar:5.3.10.Final]

at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:581) ~[hibernate-core-5.3.10.Final.jar:5.3.10.Final]

at org.hibernate.collection.internal.PersistentSet.add(PersistentSet.java:210) ~[hibernate-core-5.3.10.Final.jar:5.3.10.Final]

at me.test.jpatest.vo.User.addStudies(User.java:25) ~[classes/:na]

 

오류가 발생합니다.

 

User 클래스에서

 

@OneToMany(mappedBy = "user", fetch = FetchType.EAGER)

private Set<Study> studies = new HashSet<>();

 

또는

 

public void addStudies(Study study){

// this.getStudies().add(study);

study.setUser(this);

}

 

로 하면 오류는 발생하지 않지만

 

첫번째 방법은 study를 select하는 불필요한 쿼리가 발생되어 study가 엄청나게 많으면 속도에 영향을 주게 될 것 같고,

두번째 방법은 양방향 관계인데 한쪽에만 관계를 설정하는 문제가 있습니다.

 

이런경우 어떻게 해결해야 하나요?

 

P.S. Spring data Jpa를 사용하였습니다.

 

감사합니다

1