프로젝션 (select) 강의 14분쯤에 문자열이기 때문에 패키지 명을 다 적어야 한다는 단점이 있다고 말씀 해주셨는데 , 문자열이라면 패키지명을 문자열 변수에 담아 jpql.dto.MemberDTO query 문자열에 더해 주는 방식은 가독성이나 문제되는 점이 있는지 궁금합니다. 예제 List<MemberDTO> resultList = em.createQuery( " SELECT new jpql.dto.MemberDTO(m.username, m.age) FROM Member m " , MemberDTO. class ).getResultList() ; 변형 String memberDtoPath = " jpql.dto.MemberDTO " ; List<MemberDTO> resultList = em.createQuery( " SELECT new " +memberDtoPath+ " (m.username, m.age) FROM Member m " , MemberDTO. class ).getResultList() ;
package hello.hellospring.repository; import hello.hellospring.domain.Member; import javax.persistence.EntityManager; import java.util.List; import java.util.Optional; public class JpaMemberRepository implements MemberRepository { private final EntityManager em; // build.gradle에서 data-jpa를 등록함 // 스프링부트가 자동으로 EntityManager 만들어줌 public JpaMemberRepository(EntityManager em) { this.em = em; } // 저장, 조회, 업데이트는 쿼리 짤 필요 없음 @Override public Member save(Member member) { em.persist(member); // persist=영구저장-> setId등 모든것을 해줌 return member; } @Override public Optional findById(Long id) { Member member = em.find(Member.class, id); return Optional.ofNullable(member); } // 리스트로 탐색 시 @Override public Optional findByName(String name) { List result = em.createQuery("select m from Member m where m.name = :name", Member.class) .setParameter("name", name) .getResultList(); return result.stream().findAny(); } @Override public List findAll() { // 객체를 대상으로 쿼리를 날림 -> entity 자체를 select하는 것임 List result = em.createQuery("select m from Member m", Member.class) .getResultList(); return result; // return em.createQuery("select m from Member m", Member.class) // .getResultList(); } } 여기에서 findById는 sql없이 찾을 수 있는데 findByName은 쿼리를 작성해주는데, 이유가 어떤건가요? 혹시 id의 경우 제가 db에 넣는게아니라 컴퓨터에서 직접 넣어주는거고 name은 제가 입력해서 db에 넣기 때문인가요? 그리고 findByName에서 sql을 이용해서 특정 데이터를 뽑아내면 list로 나오는데, findById의 경우는 리스트로 나오는게 아닌가요,,?
PRG 패턴이 클라이언트 차원에서 중복 주문을 예방하는 방법이라고 하셨는데, 일단 API 자체에서도 응답으로 3xx와 같은 리다이렉션 응답코드를 리턴해줘야 가능한게 맞을까요? 그렇다면 데이터를 중복으로 생성하면 문제가 있을만한 post 요청에 대해서는 201 응답보다는 3xx 응답을 주는게 맞는건지?가 궁금합니다.
static이라는게 다른 클래스에서도 객체 생성하지 않고도 해당 변수를 사용할 수 있게 만드는 것 아닌가요? 제 생각에는 저장소를 Repository 클래스에서만 쓸거 같은데 왜 static으로 선언한건지 궁금합니다. 추가로 MemberServiceImpl에서 repository 변수를 final로 만든 이유도 궁금합니다.
https://github.com/dongguntechnology/rn_chat 17:20 Invariant Violation: "main" has not been registered. This can happen if: * Metro (the local dev server) is run from the wrong folder. Check if Metro is running, stop it and restart it in the current project. * A module failed to load due to an error and `AppRegistry.registerComponent` wasn't called. rror: Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons: 1. You might have mismatching versions of React and the renderer (such as React DOM) 2. You might be breaking the Rules of Hooks 3. You might have more than one copy of React in the same app See https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사 todoItems 변수를 todoItems: [] as Todo [] 이렇게 Todo 로 선언했는데요 this . todoItems = 1 ; 이렇게 선언하면 밑에 빨간색이 나와야 하는데 왜 안나오는걸까요... tsconfig 파일에서 "noImplicitAny" : true , 이렇게 true 로 설정했는데... 왜 그런건가요?? 답변 부탁드립니다 ㅠㅠ 감사합니다.
솔리디티 5.1.6 버전을 쓰고 있습니다. 이전에 공부할때 그 버전을 쓰기도했고 4.1.15를 설치하려고 하면 에러가 나서요 deploy할때 5.1.6으로 쓰려고하면 이런 에러가 나옵니다 ExtendableError: Unknown network "klaytn". See your Truffle configuration file for available networks. at Object.validateNetworkConfig (C:\Users\SasukiYoko\AppData\Roaming\npm\node_modules\truffle\build\webpack:\packages\environment\environment.js:111:1) at Object.detect (C:\Users\SasukiYoko\AppData\Roaming\npm\node_modules\truffle\build\webpack:\packages\environment\environment.js:16:1) at WorkflowCompile.compileAndSave.then (C:\Users\SasukiYoko\AppData\Roaming\npm\node_modules\truffle\build\webpack:\packages\core\lib\commands\migrate.js:206:1) Truffle v5.1.61 (core: 5.1.61) Node v10.15.3 꼭 4.1.15 버전을 써야하나요 ?? 5.1.6으로 하는 방법은 없을까요?
안녕하세요 제로초님 ㅎ 제가 sleact프론트 만들기 강의를 듣고 express로 서버를 직접 구현해보고 있습니다. 근데 socket부분을 구현하던 중 의문이 들었습니다. workspace가 바뀌거나, 페이지 새로고침을 하면 서버에 새롭게 socket.on('connect') 요청이 가고 서버에선 새롭게 다시 통신을 합니다. onlineMap [ newNamespace . name ][ socket . id ] = id ; //유저정보 기록 이렇게 새롭게 유저를 넣어주고, newNamespace . emit ( 'onlineList' , onlineMap [ newNamespace . name ]); 이렇게 서버로 온라인 리스트를 보내주고 콘솔에 찍어주니 새로고침할때마다 id 앞에있는 socket id가 이렇게 바뀌는데, 매번 새로고침할때마다 기존의 socket은 삭제되고, 새롭게 생성되는 것인가요? (disconnect해서 onlineList= {} 에서 삭제되는것 질문하는거아님) 그리고 DMList에서 onlineList를 가져온다음 socket.off를 해주는 이유가 무엇인가요>? 질문이 길어서 죄송합니다. 답변 기다리겠습니다!