DB (8) 썸네일형 리스트형 [DB] Query Generator [insert, update] - xlsx Excel을 이용한 insert, update 쿼리문생성기 해당 조건만 설정하면 insert와 update문 자동 생성되도록 만들었다. JPA 양방향 연관관계에서 StackOverflowError 발생한 이유와 해결 Team(팀) 테이블과 Department(부서) 테이블을 양방향 연관관계로 맺고, 이를 조회하거나 디버깅하려고 할 때 다음과 같은 에러가 발생했다.Method threw 'java.lang.StackOverflowError' exception. Cannot evaluate com.example.Team.toString()원인JPA에서 Team ↔ Department 관계를 @OneToMany, @ManyToOne으로 양방향으로 설정하면 다음과 같은 문제가 발생할 수 있다.Team → Department : @ManyToOneDepartment → List : @OneToMany이때 toString()을 호출하면 Team 안의 Department를 출력하고,Department는 다시 Team 리스트를 출.. JPA - DB 테이블 자동 생성과 양방향 연관관계 설정 기본 구조 설명JPA에서는 DB 테이블을 애플리케이션이 실행될 때 자동으로 생성해주는 기능이 있다. 예를 들어, User와 Team 두 엔티티가 있다고 가정하자.User: 사용자Team: 팀관계는 다음과 같다:하나의 팀(Team)에는 여러 명의 유저(User)가 속할 수 있다.한 유저는 하나의 팀에만 속할 수 있다.즉, JPA의 연관관계로 표현하면 다음과 같다:// User.java@ManyToOneprivate Team team;// Team.java@OneToMany(mappedBy = "team")private List users;application.yml 설정자동 테이블 생성을 위해 application.yml에 아래와 같이 설정을 추가한다.spring: jpa: generate-ddl:.. mybatis configuration location 설정 - mybatis sql을 작성하다가, 에 vo로 받아오기 위해, 설정을 해주지 않는 이상 우리는 vo가 있는 위치를 일일이 표기하기 어려워 찾아보았다. mybatis-config 설정파일을 해주기 위해서는, sessionFactory.setConfigLocation(resolver.getResource("mybatis config 경로 " ));를 추가해주면 된다. @Bean(name="sqlSessionFactory") public SqlSessionFactory sqlSessionFactory(@Qualifier("testServiceDataSource") DataSource dataSource) throws Exception { final SqlSessionFactoryBean sessionFac.. 질문할 때 DB 테이블 구조를 깔끔하게 올리는 방법과 JPA 관계 매핑 정리 개발하면서 StackOverflow나 여러 커뮤니티에 질문할 때 DB 테이블 구조를 같이 올려야 하는 경우가 많다. 텍스트로 표를 만들기가 번거로운데, 마크다운 형식 테이블을 쉽게 만들어 주는 웹사이트를 찾아서 소개한다. www.tablesgenerator.com/markdown_tables 이 사이트에선 CSV 파일을 업로드하거나 직접 데이터를 입력해서 마크다운 테이블을 바로 만들 수 있다.덕분에 질문 글을 훨씬 깔끔하게 작성할 수 있어 유용했음! Markdown Tables generator - TablesGenerator.comYou can import table data by uploading file in CSV format (Comma Separated Value). Most spreadsh.. JPA 양방향 매핑 시 발생한 무한 순환 참조 에러 JPA에서 엔티티 간 양방향 연관관계를 설정하던 중, Infinite recursion (StackOverflowError) 에러가 발생했다.nested exception is com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (StackOverflowError)문제 상황TestA와 TestB 클래스가 서로 @OneToOne 관계로 얽혀 있고, 양쪽에서 서로를 참조하게 되어 있었다. 이 구조는 직렬화(Jackson을 통한 JSON 변환) 과정에서 무한 루프를 유발한다.문제 코드// TestA.java@OneToOne(targetEntity = TestB.class)@JoinColumn(name = "hm_name")TestB .. JPA에서 단일 데이터 조회하기 JPA에서 단일 데이터 조회하기JPA로 쿼리를 작성할 때 한 개의 데이터만 불러와야 하는 상황이 있었다.그래서 @Query 어노테이션을 써서 이렇게 작성했는데,@Query("select h from testVo h where h.hmName = :hmName limit 1")하지만 여기서 limit 때문에 에러가 났다. 이유는 Hibernate의 HQL 문법이 SQL의 LIMIT을 지원하지 않아서였다.스택오버플로우를 찾아보니 이렇게 하면 한 개만 가져올 수 있다고 해서 시도해봤다.@Query(value = "select h from testVo h where h.hmName = :hmName")List findAllByhmName(String hmName, Pageable pageable);default.. JPA에서 @Transient 사용하기 JPA를 사용하다 보면 VO 클래스에 DB 컬럼들을 매핑해서 개발하는 경우가 많다.그런데 가끔은 DB 컬럼과 관계없이 임시로 사용하거나 계산용으로만 쓸 변수가 필요할 때가 있다.이럴 때는 @Transient 어노테이션을 붙여주면, JPA가 이 필드를 DB 컬럼으로 인식하지 않고 무시하게 된다.즉, @Transient가 붙은 필드는 데이터베이스에 저장되지도 않고, 조회할 때도 매핑되지 않는다. 주로 계산된 값이나, UI에서만 사용하는 임시 데이터 등을 저장할 때 사용한다.예를 들어, 사용자 이름과 성을 각각 DB 컬럼으로 관리하지만, 전체 이름을 조합해서 보여주고 싶을 때, 전체 이름 필드를 @Transient로 선언하면 편리하다.이렇게 하면 JPA가 해당 필드를 무시하기 때문에, DB 스키마 변경 없이 .. 이전 1 다음