묻고 답해요
138만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
복잡하고 join이 많은 쿼리에 대해 질문이 있습니다.
안녕하세요 영한님 강의도 듣고, 책도 잘읽고 있습니다. 요즘엔 책을 주로 읽고 있네요 ㅎㅎ 다름이 아니라 제가 질문이 있습니다. 제가 jpa를 사용하는 개인 프로젝트를 진행중이고, 영한님 책을 보면서 많은 도움을 받고있습니다. 그런데 책에는 주로 join이 많아야 한번정도 있는 예제들이 많은데, 제가 사용하는 쿼리는 join을 4번씩이나 하고, 그렇게 해서 나온 결과 행들중 랜덤으로 하나의 row를 추출해야하는 형태라 order by random() limit 1 이런식의 조건을 주려했습니다. 다소 조인이 많이들어간 쿼리인데 spring data jpa 의 @query를 사용하려다보니 쿼리가 너무 길어서 뭔가 하드코딩하는 느낌도 들고, @query에서는 rand를 지원하지 않더군요... 이런경우에는 주로 querydsl을 사용하나요? 다른 질문을 보니 creteria 는 사용하지 않는게 좋다는 의견이있으셔서 질문드립니다. 아니면 단순히 jparepository를 구현한 repository 인터페이스를 이용해서도 해결이 가능할까요?ㅠㅠ
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Service와 Entity 비즈니스 로직에 관해
안녕하세요. DDD Start라는 책을 함께 읽으며 영한님의 강좌를 다시 한번 보고 있습니다. 그러던 도중 과연 어디까지 비즈니스 로직으로 보아야할까에 대한 의문점이 생겼습니다. 책에서는 도메인(엔티티) 쪽에 비즈니스 로직을 두고 서비스 레이어는 각 도메인의 함수를 호출하는 형태로 구현하여 서비스를 최대한 얇게 만들어야한다고 하더라구요. 그런데 이번 강의 2분 49초쯤을 보면 중복 회원을 검증하는 코드가 서비스 레이어에 위치해있습니다. 회원가입이라는 기능에서 중복 회원 검증이라는 규칙은 서비스에 있어 핵심 비즈니스 로직이라고 생각하는데요. 이 부분을 엔티티쪽에 두어 검증하지않고 서비스 레이어에 두셔서 혼란이 오더라구요. 질문을 요약하자면, 1. 중복 회원 검증 코드는 비즈니스 로직이라고 봐야할까요? 2. 맞다면 비즈니스 로직은 엔티티에 들어가야 하지 않나요? 3. 요구사항에는 중복 검증뿐만 아니라 수많은 검증 로직들이 존재할텐데, 이를 서비스에 작성해야할지 엔티티에 작성해야할지 어떠한 기준으로 판단해야할까요? 4. 도메인(엔티티)에서는 레포지토리를 호출하면 안된다고 알고 있습니다. 현업에서는 이를 명확하게 지키면서 코드를 작성하나요? 5. 만약 4번이 맞다면, 중복 회원 검증의 경우 실제 데이터베이스에 조회하는 쿼리를 날려야합니다. 이렇게 데이터베이스에 접근해야하는 로직의 경우 엔티티에 작성하면 안되는걸까요? (모든 질문은 DDD를 기반으로 질문드립니다!) 많은 예제들을 살펴보아도 서비스레이어에 작성할지 엔티티쪽에 작성할지 기준을 잡기가 정말 힘드네요.. 이 부분에 대해서 영한님의 의견을 듣고 싶습니다. 감사합니다 :)
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
jpql 관련 질문입니다!
안녕하세요 강사님! 강의 잘 듣고 있습니다! JPQL(or Querydsl)과 관련된 질문이 있습니다 FROM절 서브쿼리는 지원하지 않는다고 말씀하셨는데 그 말씀은 아래외 같은 쿼리는 JPQL로 표현이 불가능하다는 말씀이신가요? 불가능하다면 아래와 같은 통계성 서브쿼리가 들어간 쿼리를 어떻게 해결해야 가장 효율적으로 해결할 수 있는건지 궁금합니다!(Querydsl을 사용해서 해결하고 싶습니다) 아래 쿼리는 거래 내역 테이블에서 거래된 아이템별로 그룹핑한 데이터에서 아이템별 최소 가격을 먼저 뽑아내고, 이렇게 만들어낸 인라인 뷰를 아이템 테이블, 브랜드 테이블과 조인하는 쿼리입니다 SELECT i.*, br.*, b.immediately_purchase_price FROM item i INNER JOIN brand br ON br.brand_id = i.brand_id LEFT JOIN ( SELECT item_id, MIN(price) AS immediately_purchase_price FROM bid GROUP BY item_id ) b ON i.item_id = b.item_id ORDER BY release_date DESC LIMIT 16
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
윈도우에서 gradle로 빌드하시려는 분께 공유드립니다.
윈도우 환경에서 gradle로 빌드 하시려는 분들을 위해 공유 드립니다. 1. build.gradle dependencies { ... classpath "com.github.node-gradle:gradle-node-plugin:3.1.0" } classpath에 node-gradle 을 추가해 주시고 def preinstalledNodeDistributionDirectory = file("${projectDir}/src/main/resources/static/node") 이거 하나 선언해 주시고 apply plugin: "com.github.node-gradle.node" 위 플러그인 적용해주시면 node { version = '11.15.0' // 제가 사용중인 노드 버전을 적었습니다. download = true nodeModulesDir = file("${projectDir}/src/main/resources/static") } task copyFrontLib(type: Copy) { from "${projectDir}/src/main/resources/static" into "${projectDir}/build/resources/main/static/." } copyFrontLib.dependsOn npmInstall compileJava.dependsOn copyFrontLib 해당 코드를 추가하여 사용하시면 build시에 프런트 라이브러리들을 빌드에 추가하실 수 있습니다. 2. css 깨짐 현상 본 강의와 같이 부트스트랩을 사용하셔서 동일한 css를 적용시키려면 그냥 install bootstrap으로는 안되는것같습니다. 버전이 달라서 css 속성명이 달라졌나봐요... 그래서 만약에 build에 정상적으로 라이브러리 추가 되시는데 뷰가 어디가 좀 깨져서 나오시거나 css가 적용이 잘 안되시면 "dependencies": { "bootstrap": "^4.4.1", "jquery": "^3.4.1" } 선생님이 강의에서 사용하신 버전으로 명시적으로 바꾸어주셔야 합니다. 저렇게 적용하면 정상적으로 뷰가 나와요... 많이 해맸네요ㅜㅜ
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
cancelOrder에서 order.cancel에 의해 발생할 수 있는 IllegalStateException에 대한 처리는 필요없나요??
이미 상품이 발송되었을 때 IllegalStateException이 발생하게 되어있는데, 이에 대한 처리는 없는 것 같아서 질문드립니다.그리고 만약에 이것에 대해 처리해주는게 맞다면 처리는 어떻게 해야할까요??
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Delivery에 있는 Address 관련하여 질문드립니다.
안녕하세요 선생님 강의 잘 듣고 있습니다. Delivery에 Address가 있는데 이 값은 Delivery에 있는 Order를 참조하고 그 안에 있는 Member를 참조하면 가져올 수 있지 않나요 ? 참조가 너무 많이 일어나기 때문에 Address를 Delivery에 선언하는건가요 ??
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
@BatchSize 와 컬렉션 페치조인 관련해서 질문이 있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. . 안녕하세요. 김영한 강사님. 김영한님 강의를 열심히 수강하는 학생입니다. . 다름이 아니라 제가 "페치조인 2 - 한계" 챕터의 13분 부터 19분까지 진행되는 강의 내용중 이해가 안되는 부분이 있어서 이렇게 질문을 하려합니다. . 분명 강의 내용에서는 컬렉션을 페치조인 한 후 페이징 API를 사용할 수 없다고 하였습니다. . 그리고 이를 극복하기 위하여 @BatchSize를 이용하는 방법이 소개되는데, 이 방법이 어떤 면에서 해결에 도움이 되는지 모르겠습니다. . 컬렉션을 페치조인 한 후 페이징 API를 사용할 수 없는 이유는 1대다 조인으로 뻥튀기된 데이터들을 페이징API로 DB에서 잘라올 경우 JPA가 잘려진 데이터만 받기 때문에 이를 기반으로 잘못된 정보를 내보낼 수 있기 때문이었습니다. . 그리고 @BatchSize는 LazyLoading 된 데이터들을 사용할때마다 가져오지 않고 한꺼번에 가져오는 역할을 담당하여 Lazyloading의 성능을 개선하는 역할을 하고 있습니다. . 이것만 놓고 보면 @BatchSize가 컬렉션 페치조인의 페이징과 어느 면에서 관련있는지 모르겠습니다. 한꺼번에 가져오는 기능은 데이터가 잘려들어오는 것과 관련이 없어 보이거든요. 혹시 제가 잘못알고 있는걸까요? 답변 부탁드립니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
연관관계 편의 메소드
강사님 항상 좋은 강의 감사합니다! 연관관계 편의 메소드에 내부에 set과 add , get이 각각 들어갈때가 다르길때 혹시 어떤 경우일때 set이고 get인지 알고 싶습니다. 제가 생각했을때는 1) member엔티티와 order 엔티티 간 setMember메소드에서 member는 다대일 중 '다'이므로 setMember 메서드를 만들어야 했던건가요? 2) 마찬가지로 그렇다면 order와 orderItem 사이에서 orderItem은 일대다 의 '일' 이므로 addOrderItem()메서드가 생성되었다 생각을 했는데 그렇게 따지니 setDelivery() 메서드가 이해가 가지 않습니다. 일대일의 관계로 '일'에 위치해 addDelivery()인가 싶기도 하였으나 그렇지 않더라고요 ㅠㅠ 3) setDelivery()메서드는 set으로 시작하는 setMember() 메서드와 같은 방식으로 작성하는 것인가 했는데 메서드 내부에서는 this.delivery = delivery; //배송지 설정delivery.setOrder(this); 이렇게 set메서드와 add메서드가 섞여있는 것 같은데 이해가 많이 부족한 것 같습니다.. 혹시 이에 관해서 답변해주실 수 있을까요?
-
미해결실전! Querydsl
postgres 관련 공간 쿼리 가능 여부 질문입니다.
안녕하세요. 저는 주로 postgresql 을 사용하는데 공간 데이터 관련 postgis 공간 함수나 postgres의 with recursive 같은 구문을 사용해야 할 일들이 있는데 이런것들도 querydsl 을 사용하면 쓸 수 있을까요? 아니면 이런 것들은 네이티브 쿼리나 jdbc 템플릿, 마이바티스 등등.. 어떤걸 사용하는게 좋을지 궁금합니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
localhost:8083/connectors 호출시 에러가 발생합니다.
wsl2 리눅스에서 서버를 startup 하였고 정상적으로 실행은 되었습니다. startup 후에 localhost:8083/connectors호출 하면 아래와 같은 에러가 발생합니다. org.apache.kafka.connect.errors.ConnectException: Failed to find any class that implements Connector and which name matches io.confluent.connect.jdbc.JdbcSourceConnector, available connectors are: PluginDesc{klass=class org.apache.kafka.connect.file.FileStreamSinkConnector, name='org.apache.kafka.connect.file.FileStreamSinkConnector', version='6.1.0-ccs', encodedVersion=6.1.0-ccs, type=sink, typeName='sink', location='classpath'}, PluginDesc{klass=class org.apache.kafka.connect.file.FileStreamSourceConnector, name='org.apache.kafka.connect.file.FileStreamSourceConnector', version='6.1.0-ccs', encodedVersion=6.1.0-ccs, type=source, typeName='source', location='classpath'}, PluginDesc{klass=class org.apache.kafka.connect.mirror.MirrorCheckpointConnector, name='org.apache.kafka.connect.mirror.MirrorCheckpointConnector', version='1', encodedVersion=1, type=source, typeName='source', location='classpath'}, PluginDesc{klass=class org.apache.kafka.connect.mirror.MirrorHeartbeatConnector, name='org.apache.kafka.connect.mirror.MirrorHeartbeatConnector', version='1', encodedVersion=1, type=source, typeName='source', location='classpath'}, PluginDesc{klass=class org.apache.kafka.connect.mirror.MirrorSourceConnector, name='org.apache.kafka.connect.mirror.MirrorSourceConnector', version='1', encodedVersion=1, type=source, typeName='source', location='classpath'}, PluginDesc{klass=class org.apache.kafka.connect.tools.MockConnector, name='org.apache.kafka.connect.tools.MockConnector', version='6.1.0-ccs', encodedVersion=6.1.0-ccs, type=connector, typeName='connector', location='classpath'}, PluginDesc{klass=class org.apache.kafka.connect.tools.MockSinkConnector, name='org.apache.kafka.connect.tools.MockSinkConnector', version='6.1.0-ccs', encodedVersion=6.1.0-ccs, type=sink, typeName='sink', location='classpath'}, PluginDesc{klass=class org.apache.kafka.connect.tools.MockSourceConnector, name='org.apache.kafka.connect.tools.MockSourceConnector', version='6.1.0-ccs', encodedVersion=6.1.0-ccs, type=source, typeName='source', location='classpath'}, PluginDesc{klass=class org.apache.kafka.connect.tools.SchemaSourceConnector, name='org.apache.kafka.connect.tools.SchemaSourceConnector', version='6.1.0-ccs', encodedVersion=6.1.0-ccs, type=source, typeName='source', location='classpath'}, PluginDesc{klass=class org.apache.kafka.connect.tools.VerifiableSinkConnector, name='org.apache.kafka.connect.tools.VerifiableSinkConnector', version='6.1.0-ccs', encodedVersion=6.1.0-ccs, type=source, typeName='source', location='classpath'}, PluginDesc{klass=class org.apache.kafka.connect.tools.VerifiableSourceConnector, name='org.apache.kafka.connect.tools.VerifiableSourceConnector', version='6.1.0-ccs', encodedVersion=6.1.0-ccs, type=source, typeName='source', location='classpath'} at org.apache.kafka.connect.runtime.isolation.Plugins.connectorClass(Plugins.java:208) at org.apache.kafka.connect.runtime.isolation.Plugins.newConnector(Plugins.java:180) at org.apache.kafka.connect.runtime.AbstractHerder.getConnector(AbstractHerder.java:572) at org.apache.kafka.connect.runtime.AbstractHerder.validateConnectorConfig(AbstractHerder.java:342) at org.apache.kafka.connect.runtime.AbstractHerder.lambda$validateConnectorConfig$1(AbstractHerder.java:326) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748)
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
select 조회 성능 관련 질문
1. 일반 db에서 select * from 보다 select 칼럼명 from 보통 후자의 방법으로 원하는 칼럼들만 부르는 게 성능 면에서 더 뛰어난 게 아닌지 궁금합니다. 2. 복잡한 테이블에서 전체 칼럼의 갯수가 20~30개가 넘어가면 fetch join 방식보다 DTO로 직접 조회하시는 방법을 쓰시는지 궁금합니다. (fetch join으로 해도 성능이 원하는 만큼 안 나올때 DTO로 직접 조회 하시는건가요?) 3. JPA 관점에서 복잡한 테이블이나, 컬렉션 조회는 강좌에서처럼 최적화를 할 수 있지만. 일반 테이블 jpa에서는 보통 전체 엔티티를 불러올 수 밖에 없던데 1)전체 엔티티를 조회했을 때와 2)원하는 칼럼들만 조회했을 때의 성능차이가 미비한지 궁금합니다. 4. spring data jpa에서 Projections로 원하는 칼럼만 조회할 수 있던데 실무에서는 엔티티가 한 개이면서도 단순할 때 성능을 위해 많이 사용하시는지 궁금합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
잘 와닿지가 않습니다ㅠㅠ
결국에는 Team엔티티의 Members 컬렉션을 수정했는데 쿼리는 Member에 관한 쿼리가 나가서 헷갈리기 때문에 연관관계를 정확하게 잡고 주인 쪽에서만 등록 및 수정이 가능하게 해주는건가요??
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
연관관계 편의 메소드 질문입니다.
어떤 엔티티 클래스에 작성해야하나요? Order에 ManyToOne으로 묶여있는 member OneToMany로 묶여있는 OrderItems 둘다 작성이 돼 있어서 어떤 규칙으로 어떤 엔티티 클래스에 작성해야 하는지 궁금합니다.,
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
연관관계 편의메서드 .
안녕하세요 JPA 활용 1편을보고 넘어왔습니다.. 1)질문 그렇나 현재 아직 이해못한점이 연관관계 편의메서드를 사용하면 어느면서에서 이점이 발생하는지 잘모르겠습니다.. 양방향관계시 연관관계메서드 에서 public void setTeam(Team team){ this.team = team; team.getMembers().add(this);} team.getMembers().add(this); 이부분이 team 엔티티에서도 Member의 값을 가질수있도록 하는것으로 보여집니다만 team.getMembers().add(this); 이부분이없어도 Team team = em.find(Team.class, teamA.getId()); System.out.println("연관관계"+team.getMembers()); team.getMembers() 를해도 값이 잘 보여집니다.. 어느면에서 편의가 발생하는지 감이잘 안잡힙니다 ㅠ.. 2)질문 일대 다 관계에서 페치조인 쿼리로 페이징을하면 데이터 뻥튀기 때문에 위험하다고 하셨습니다. 그래서 직접 확인을해보고있는데욥 Team teamA = new Team(); teamA.setName("팀A"); em.persist(teamA); Member member1 = new Member(); member1.setUsername("회원1"); member1.setAge(10); member1.setTeam(teamA); em.persist(member1); Member member7 = new Member(); member7.setUsername("회원7"); member7.setAge(10); member7.setTeam(teamA); em.persist(member7); String query = "select t from Team t join fetch t.members"; List<Team> result = em.createQuery(query,Team.class) .setFirstResult(0) .setMaxResults(1) .getResultList(); for (Team team : result) { System.out.println("팀이름 = " + team.getName()); for (Member member : team.getMembers()){ System.out.println("------------> member = " + member); } } 결과 딱이렇게 나왔는데 이것이 뻥튀기가 된결과인가요? 어느부분에서 위험한것인지 잘 모르겠습니다 .. (제생각으로는 0번인덱스 페이지에 팀의값 1개가 잘 출력됫다고 생각되거든요 아니라면 팀에 맴버의 값을 1개만 출력해야하는데 두개가 출력이되어서 문제인건가요?)
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Exception 질문입니다.
안녕하세요 영한님, 매번 강의를 보고 커뮤니티 게시판에서 다른분들의 질문을 보고 저도 모르는걸 새로 배워가고있는데요 질문글 중 ====================================== 실무에서 보면 throw new xxxxException을 했을 경우 이를 호출하는 메서드에 뻘겋게 throw하거나 try catch하라고해서 똑같이 throw해주거나 했던거같은데... MemberService는 왜 이런게 없을까요? ============================== 라는 내용에서 질문이 있습니다. 구글링으로 checked와 unchecked의 차이에 대해서 알아보았습니다. 다만 checked는트랜잭션에서 롤백이 안되고 unchecked는 롤백이 된다고 하는걸 알았습니다. 여기서 궁금한게 있습니다. 강의 18:17에 validateDuplicateMember 매소드 내에서 if(!findMember.isEmpty() 일 경우 uncheck 예외를 던지게 됩니다. 같은 Unchecked인 IndexOutOfBoundException의 경우 배열의 크기를 잘못 접근하면 try catch로 묶지 않았을 경우 프로그램이 종료가 되더라구요, 하지만 RunTimeException을 상속받는 IllegalStateException은 따로 try catch문으로 잡아주지 않아도 프로그램이 종료되지 않고 예외가 발생하면 이미 존재하는 회원입니다. 라는 로그를 볼 수있습니다. 스프링 내부 어디선가 throw new IllegalStateException을 받아주는것인가요? 받는다면 어디서 받아주는 것인가요? 감사합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
fetchJoin() 에러 발생
안녕하세요 fetchJoin() 할 때 에러가 발생하는데 해결방법을 찾을 수 없어 조언을 구합니다 정상 동작 query.from(A) .leftjoin(A.B , B).fetchJoin() 에러 발생 query.from(A) .leftjoin(A.B , B).fetchJoin() .leftjoin(A.B.C , C).fetchJoin() fetchJoin할 때 엔티티 탐색(?)이 1단계 더 생기면 아래 에러가 발생합니다 도저히 해결이 안되네요 비슷한 질문이 있었는데 dto도 아닌 것 같네요 관계설정은 잘 한 것 같은데 전부 many to one > many to one으로 나아갑니다 org.hibernate.QueryException: query specified join fetching, but the owner of the fetched association was not present in the select list [FromElement{explicit,not a collection join,fetch join,fetch non-lazy
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
MemberForm? Dto?
강의에서 구현한 MemberForm이 Dto와 같은 개념인가요? MemberForm을 사용하신 이유에 대해 설명하신것을 들어보면 Dto와 같은 것 같은데 만약 같은것이면 왜 Dto라 명명하지 않으신건지, 혹은 Dto와 다른 개념이면 어떤 점이 다른것인지 궁금합니다.
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
선생님 안녕하세요
안녕하세요 제가 강의를 보고 공부하던도중 8:14분에 있는 정규식과 닉네임의 제출양식이 같아야하는부분에서 must match~라고 빨간 오류를 내주는 부분에서 저는 가입하기 버튼을 눌렀을때 오류를 내지않고 그냥 인덱스 페이지(/)로 그냥 정상적으로 보내버려서 오늘 하루동안 이 오류를 계속 잡고 있다가 디버깅, 코드 비교 5번, 인텔리제이 재설치 pom.xml 파일 똑같이 맞추기 별 방법을 해봐도 안됬는데 선생님께서 제공해주신 완성된 소스코드의 첫 커밋으로 체크아웃하여 스프링 버전을 선생님의 스프링 버전인 2.2.4에서 제가 강의를 들으며 직접 코드를 따라치던 스프링의 버전인 2.5.2로 변경을 하고나니 선생님꺼의 완성코드 프젝에서도 저런 must match오류 구문이 안나타나고 그냥 인덱스페이지로 이동을 시키는 현상이 똑같이 나타났습니다. 제가 이 현상을 보고 오류의 원인이 스프링 버전차이라고 확신을 하게되었는데요 제 인텔리버전은 21.2EAP버전입니다 근데 스프링 프젝을 처음만들때 2.2.4버전으로 만드는 탭이 아예없어서 앞으로 스프링 프젝을 2.5이상 버전으로 해야할거같은데 이런 버전차이때문에 나타나는 현상을 어떻게 해결할수 있을까요? 그리고 @Pattern 어노테이션 뿐만아니라 @Length어노테이션에도 min = 3, max = 5를 주고 5개를 훨씬넘게 입력을 했는데도 오류를 잡아주지않았습니다. P.S 제가 직접 보고 따라쳤던 타이핑버전의 소스코드를 그대로 선생님꺼 완성된프젝에 옮겨서 실행했는데 정상작동이 됬습니다. 이 말은 제가 타이핑친 소스코드에 정말 문제가 없다는 거여서 제가 버전차이의 문제라고 확신을 하게되었습니다. 아 그리고 EAP버전이여서도 아닌게 제가 재설치를 하기전까지는 EAP버전이 아니였습니다. 긴글 읽어주셔서 정말 감사합니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
연관관계 메소드와 setter
엔티티에서 Setter 를 사용하지 않아야 변경점을 줄일 수 있어 유지보수 할 때 유리하다고 하셔서 최대한 사용을 자제하려고 하는데요, 연관관계 메소드를 만들 때, setter 를 사용해서 만드셨는데 없이 만들 수 있는 방법이 있을까요? // Order - Delivery 연관관계 메소드 public void setDelivery(Delivery delivery){ this.delivery = delivery; delivery.setOrder(this); // Delivery 의 setter 사용 }
-
미해결
JPA 1:1 연관관계 설정
안녕하세요 양방향 1:1 연관관계 관련되서 이해가 잘 되지않아 문의드립니다! 부모 entity, 자식 entity가 무조건 1:1 관계인 경우 자식은 없을 수 도 있지만 부모는 항상 존재해야함으로 부모 entity가 주최가 되는게 맞는걸로 알고있는데 자식이 존재하는 경우 데이터 등록 시 부모 테이블에만 등록이 되는데 엔티티 설정이 잘못된 부분이 어디인지 잘 모르겠습니다.. ㅠㅠ @Getter @Setter @NoArgsConstructor(access = AccessLevel.PUBLIC) @Entity @Table(name = "TB_MANAGER") @DynamicInsert @DynamicUpdate @JsonInclude(JsonInclude.Include.NON_EMPTY) public class Manager { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "MANAGER_KEY") @ApiModelProperty(value = "관리자 시퀀스", hidden = true, name = "managerKey") private Long managerKey; @Column(name = "MANAGER_ID") @ApiModelProperty(value = "관리자 아이디", name = "managerId") private String managerId; @Column(name = "PASSWORD") @ApiModelProperty(value = "비밀번호", name = "password") @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) private String password; @Column(name = "NAME") @ApiModelProperty(value = "이름", name = "name") private String name; @OneToOne(fetch = FetchType.EAGER) @JoinColumn(name = "MANAGER_KEY") private ManagerSub managerSub; } @Getter @NoArgsConstructor(access = AccessLevel.PUBLIC) @Entity @Table(name = "TB_MANAGER_SUB") @DynamicInsert @DynamicUpdate @JsonInclude(JsonInclude.Include.NON_EMPTY) public class ManagerSub { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "MANAGER_SUB_KEY") @ApiModelProperty(value = "zzz", hidden = true, name = "managerSubKey") private Long managerSubKey; @Column(name = "MANAGER_KEY") private Long managerKey; @Column(name = "COUNT") @ApiModelProperty(value = "수", name = "count") private Long count; @Column(name = "PHONE") @ApiModelProperty(value = " 전화번호", name = "phone") private String phone; @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinColumn(name = "MANAGER_KEY", insertable = false, updatable = false) private Manager manager; }