김영한 멘토님 안녕하세요 강의를 듣다가 질문이 있어서 질문 남깁니다! HashSet 자료구조를 사용해 객체를 저장할때, HashCode와 equals를 재정의 해야한다고 말씀해 주셨는데요. 정말 멘토님 말대로 재정의 하지 않으면 값이 중복되어서 저장되었습니다. 근데 궁금한것은 HashSet 자료구조이기에 HashCode를 사용하는것은 아는데, 그 이전에 자료구조가 Set의 기반의 자료구조인데 Set은 원래도 중복된 값을 허용하지 않는걸로 알고있습니다. 근데 왜 HashCode를 재정의해야 그때서야 값이 중복되어서 저장되지 않는것인가요? 애초에도 Set 기반의 자료구조인데 말입니다.
강의 처럼 벌크 연산 후 int resultCount = em.createQuery("update Member m set m.age=20") .executeUpdate(); clear없이 바로 createQuery를 날리면, Member result = em.createQuery("select m from Member m where m.id = :id", Member.class) .setParameter("id", member1.getId()) .getSingleResult(); System.out.println("member.getAge() = " + result.getAge()); 아래와 같은 select 쿼리가 날라가고 age가 원래값으로 나옵니다. Hibernate: /* select m from Member m where m.id = :id */ select m1_0.id, m1_0.age, m1_0.memberType, m1_0.TEAM_ID, m1_0.username from Member m1_0 where m1_0.id=? member.getAge() = 10 ////////////////////////////// find처럼 selcet문이 안날라갈줄 알았는데, 날라가서 createQuery 작동방식이 궁금합니다. 1.이 쿼리가 실제로 db에 날라갔는데, age=20값을 가지고오면서 영속성 컨텍스트에 들렸는데, 이미 캐시가 존재해서, 쿼리 값을 업데이트 안해주고 원래값 age=10을 가지고 온건가요? 2. 아니면 로그에 보이는 쿼리가 실제 db 에 날라가지 않고 생성만된채로, 영속성 컨텍스트를 찾는건가요?
[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
리스트가 너무 이상하게나와요 ㅠ - 본 강의 영상 학습 관련 문의에 대해 답변을 드립니다. (어떤 챕터 몇분 몇초를 꼭 기재부탁드립니다) - 이외의 문의등은 평생강의이므로 양해를 부탁드립니다 - 현업과 병행하는 관계로 주말/휴가 제외 최대한 3일내로 답변을 드리려 노력하고 있습니다 - 잠깐! 인프런 서비스 운영(다운로드 방법포함) 관련 문의는 1:1 문의하기를 이용해주세요.
강의를 들으면서 궁금증이 생겼습니다. gitignore에 설정된 파일은 깃허브에만 노출되지 않는것인지, 아니면 git clone으로 프로젝트 다운 시에는 폴더 안에 존재하는지 궁금합니다. 만약 clone으로 다운 시 존재하지 않는다면 다른 사람이 제 프로젝트를 clone 하더라도 로컬에서 제대로 돌아가지 않는 게 제 생각인데 맞을까요? ec2에서 현재 프로젝트에 여러 branch가 있을 때, 그 중에서 어떤 branch의 코드를 사용할지는 어떻게 정해지는지 궁금합니다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] querydsl 강의를 듣고 복습하면서 적용해보고 있는데, memberRepository 부분에서 @RequiredArgsConstructor을 사용했더니 compileJava부분에서 em의 초기값이 없다는 예외가 발생했습니다. 생성자를 활용해서 해결되긴 했는데 그 전의 코드에서 왜 작동이 안되었는지 궁금해서 질문드립니다. @RequiredArgsConstructor을 사용한다던가 하는 더 간단한 방법도 있는지 궁급합니다. 코드파일입니다 https://drive.google.com/file/d/1ezwW4PrReG_BX-lmAC1uiOL8Syk3GbFW/view?usp=sharing
queryFactory.select(Projections.bean(GetMyCommentResponse.MyCommentInfo.class, commentEntity.id.as("commentId"), commentEntity.content.as("content"), commentEntity.likeCount.as("likeCount"), commentEntity.createDateTime.as("createDateTime"), Projections.bean( GetMyCommentResponse.MyCommentedPopUpInfo.class, postEntity.id.as("postId"), postEntity.name.as("postName"), postEntity.mainImageUrl.as("mainImageUrl"), ).as("postInfo"), // commentEntity // 엔티티도 같이 조회하면 에러가 나지 않음 )) .from(commentEntity) .join(commentEntity.post, postEntity).fetchJoin() 안녕하세요 영한님! 강의 잘 듣고 있습니다. 공부 중에 코드를 작성하다 query specified join fetching, but the owner of the fetched association was not present in the select list 이런 에러가 발생했는데, fetchjoin시 실제 질의하는 대상 Entity를 select절에 쓰지않아서 에러가 나더라구요. select절에 commentEntity를 추가하면 에러가 발생하지 않지만 이미 commentEntity의 필드들은 모두 가져왔는데, 또 조회하는게 불필요한 작업이라고 생각되어서요. 그렇다고, fetchjoin이 아닌 일반 조인을 써버리면 코멘트마다 포스트에 대해서 n+1 문제가 발생할 것이라고 생각되구요 이러한 상황에서 좋은 해결방법이 있을까요? 감사합니다
강의하신 코드랑 같고 try { Team team = new Team(); team.setName("teamA"); em.persist(team); Member member = new Member(); member.setUsername("member"); member.setAge(10); member.setTeam(team); em.persist(member); em.flush(); em.clear(); String query = "select m from Member m left join m.team t"; List<Member> result = em.createQuery(query, Member.class) .getResultList(); tx.commit(); } catch (Exception e) { tx.rollback(); e.printStackTrace(); } finally { em.close(); } 결과 Hibernate: /* select m from Member m left join m.team t */ select m1_0.id, m1_0.age, m1_0.TEAM_ID, m1_0.username from Member m1_0 left join이 안나가네요, jpql로 join까지 썻는데 왜 안나가는걸까요
현재 github actions 실행할때마다 계속 Run Command timeout 뜨는 상태입니다. swap 생성을 해주었는데도 계속 실패하네요.. 아래는 yml 코드입니다. # Workflow의 이름 # Workflow : 하나의 yml 파일을 하나의 Workflow라고 부른다. name: Deploy To EC2 # Event : 실행되는 시점을 설정 # main이라는 브랜치에 push 될 때 아래 Workflow를 실행 on: push: branches: - step3 # 하나의 Workflow는 1개 이상의 Job으로 구성된다. # 여러 Job은 기본적으로 병렬적으로 수행된다. jobs: # Job을 식별하기 위한 id deploy: # Github Actions를 실행시킬 서버 종류 선택 runs-on: ubuntu-latest # Step : 특정 작업을 수행하는 가장 작은 단위 # Job은 여러 Step들로 구성되어 있다. steps: - name: SSH(원격 접속)로 EC2에 접속하기 # Step에 이름 붙이는 기능 uses: appleboy/ssh-action@v1.0.3 with: host: ${{ secrets.EC2_HOST }} # IP 주소 username: ${{ secrets.EC2_USERNAME }} key: ${{ secrets.EC2_PRIVATE_KEY }} # 키페어 값 script_stop: script: | cd /home/ubuntu/spring-gift-point git pull origin step3 ./gradlew bootJar -x test sudo fuser -k -n tcp 8080 || true nohup java -jar build/libs/*SNAPSHOT.jar > ./output.log >&1 &
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 { Member member = new Member(); member.setUsername("A"); System.out.println("======================"); em.persist(member); Thread.sleep(9000); System.out.println("======================="); tx.commit(); } catch (Exception e) { tx.rollback(); } finally { em.close(); } emf.close(); } } @Entity public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "name", nullable = false) private String username; public Member() { } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } } 우선 생각 했던 결과는 현재 identity 전략이므로 em.persist() 할 경우 insert 쿼리가 DB에 바로 보내지고 DB의 Member 테이블에 값이 저장되는거를 예상했습니다. 실제 실행해 보면 ====================== Hibernate: /* insert for jpa_basic.ex1_hello_jpa.hellojpa.Member */insert into Member (name, id) values (?, default) Thread.sleep(9000) 전까지는 insert 쿼리가 콘솔에 잘 찍힙니다. 그래서 H2 콘솔에 데이터가 잘 저장이 됐는지 확인 해봤습니다. 결과는 저장이 되지 않았습니다. Thread.sleep(9000)가 끝나고 나서야 데이터가 저장이 됩니다. 그래서 생각했던 결과인 identity 전략에서 em.persist() 할 경우 왜 DB에 바로 저장이 안되는건지 궁금합니다. 참고로 http://hibernate.hbm2ddl.auto 옵션은 create입니다. 감사합니다.
데이터 전처리 과정에서 이해되지 않는 부분이 있습니다. import pandas as pd import FinanceDataReader as fdr df_krx = fdr.StockListing('KRX') df_krx 로 데이터를 확인했습니다. ㄴ일부 컬럼 (ex.Dept)에 결측치가 있습니다. <- 값이 비어있습니다. Nan 값으로 채워진 것은 아닙니다. ㄴ이 때 info() 메소드와 df_krx.isnull()로 확인해보면 null값이 없는 것으로 나오고 isnull() 또한 모두 false가 나오는데 원인을 모르겠습니다. ㄴ이후 to_csv 메소드를 사용하여 파일을 저장한 후 저장한 파일을 읽어왔을 때는 해당 값들이 NaN 값으로 바뀌어 있는데요. 원인이 무엇일까요?
# warning 어쩌구 뜨면 쓰는건데 굳이 안써도 됨 import urllib3 urllib3.disable_warnings() # text None Type 에러 일 시 header를 추가해준다. # SSLdError 발생 시 verify옵션 추가해준다. header = { 'User-Agent' : 'Mozilla/5.0', 'Referer' : 'https://www.riss.kr/search/Search.do?isDetailSearch=N&searchGubun=true&viewYn=OP&queryText=&strQuery=%ED%8C%A8%EC%85%98+%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5&exQuery=&exQueryText=&order=%2FDESC&onHanja=false&strSort=RANK&p_year1=&p_year2=&iStartCount=0&orderBy=&mat_type=&mat_subtype=&fulltext_kind=&t_gubun=&learning_type=&ccl_code=&inside_outside=&fric_yn=&db_type=&image_yn=&gubun=&kdc=&ttsUseYn=&l_sub_code=&fsearchMethod=&sflag=1&isFDetailSearch=N&pageNumber=1&resultKeyword=%ED%8C%A8%EC%85%98+%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5&fsearchSort=&fsearchOrder=&limiterList=&limiterListText=&facetList=&facetListText=&fsearchDB=&icate=re_a_kor&colName=re_a_kor&pageScale=100&isTab=Y®nm=&dorg_storage=&language=&language_code=&clickKeyword=&relationKeyword=&query=%ED%8C%A8%EC%85%98+%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5' } for article in articles: title = article.select_one(".title > a").text link = 'https://www.riss.kr' + article.select_one(".title > a").attrs['href'] # 상세 페이지로 요청 response = requests.get(link, headers=header, verify=False) html = response.text soup = BeautifulSoup(html, 'html.parser') # 2. 순서를 기준으로 찾기 if soup.find('span', string='발행기관'): press = soup.find('span', string='발행기관').find_next_sibling().text # find_next_sibling 옆에 있는 명령어를 찾아라 라는 명령문 else: press = [] if soup.find('span', string='발행연도'): year = soup.find('span', string='발행연도').find_next_sibling().text else: year = [] if soup.find('span', string='주제어'): keywords = soup.find('span', string='주제어').find_next_sibling().text.split(';' '') keywords_result = [] for keyword_for in keywords: keywords_result.append(keyword_for.strip()) else: keywords = [] print(title, link, press, year, keywords_result) # result = [] # for keyword in keywords: # result.append(keyword.strip())
Member.java @OneToMany @JoinColumn(name="member") private List<Order> orders = new ArrayList<>(); Order.java @ManyToOne @JoinColumn(name="member_id") //맵핑할 컬럼 private Member member; Member 의 joinColumn 은 member 객체 자체이고 Order의 joinColumn은 db의 컬럼 명인데 member 의 joinColumn 을 member_id, 즉 db의 컬럼명으로 또는 그냥 id 라고 하면 안되나요? 안된다면 이유도 알려주시면 감사하겠습니다!!