작성
·
117
·
수정됨
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
여기에 질문 내용을 남겨주세요.
강의에 나온 대로 t.members.size를 가져오는 쿼리를 작성 후 실행해봤습니다. 하지만 결과가 나오지 않고, h2디비에 들어가서 값을 확인해보니 값이 모두 지워져있습니다. jpql쿼리를 작성하고 결과를 가져오는 코드를 주석으로 처리하고 돌려보면, 값이 제대로 들어가있는 것을 확인할 수 있었습니다.
단순히 쿼리를 날리면서 디비에 있는 값이 모두 삭제되는 현상은 아닌 것 같은 게, team.teamname처럼 team의 상태필드를 셀렉트해오는 쿼리문을 날리면, 정상작동되며 디비의 값도 사라지지 않습니다. 대체 어떤 이유 때문에 컬렉션 값 연관 필드를 타고 들어가면 디비의 값이 사라지는 건가요?
select team.teamName from Team t 하는 경우
package jpql;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.EntityTransaction;
import jakarta.persistence.Persistence;
import java.util.List;
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{
Team team = new Team();
team.setTeamName("team1");
em.persist(team);
Member member = new Member();
member.setUserName("raewoo");
member.setAge(10);
member.changeTeam(team);
em.persist(member);
em.flush();
em.clear();
System.out.println("=============");
String sql = "select t.teamName from Team t";
String result = em.createQuery(sql, String.class)
.getSingleResult();
System.out.println(result);
tx.commit();
}catch (Exception e) {
tx.rollback();
}finally {
em.close();
}
emf.close();
}
}
select t.members.size from Team t하는 경우
package jpql;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.EntityTransaction;
import jakarta.persistence.Persistence;
import java.util.List;
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{
Team team = new Team();
team.setTeamName("team1");
em.persist(team);
Member member = new Member();
member.setUserName("raewoo");
member.setAge(10);
member.changeTeam(team);
em.persist(member);
em.flush();
em.clear();
System.out.println("=============");
String sql = "select t.members.size from Team t";
Integer result = em.createQuery(sql, Integer.class)
.getSingleResult();
System.out.println(result);
tx.commit();
}catch (Exception e) {
tx.rollback();
}finally {
em.close();
}
emf.close();
}
}
답변 2
0
느낌상 쿼리문을 날릴 때 디비에서 값이 삭제된다기보다는, 쿼리문과 그 실행단계에서 어떤 오류가 있어서 tx.commit까지 도달하지 못해서 디비에 create가 안되는 것 같은데.. (persistence.xml에서
<property name="hibernate.hbm2ddl.auto" value="create" />
로 해놨습니다)
쿼리문을 작성하는 데 어떤 문법적 오류가 있나요? 근데 왜 오류메시지가 안 떴을까요..?ㅠㅠ
hibernate의 어떤 버그인가요?ㅜㅜ