해결된 질문
작성
·
43
·
수정됨
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예
[질문 내용]
안녕하세요 jpa 기본편 수강 중인 학생입니다.
애플리케이션 개발 강의에서
member.setId(1L);
member.setName("HelloA");
하고 2L,HelloB로 바꿔서 실행 후 테이블조회를 하면 1L과HelloA는 뜨지 않고
2L,HelloB만 조회가 됩니다.
코드는 똑같이 작성한 것 같은데 어디가 문제일까요?
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 {
//code
Member member = new Member();
member.setId(1L);
member.setName("HelloA");
em.persist(member);
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
em.close();
}
emf.close();
}
}
실행을 시키면
Hibernate:
drop table if exists Member cascade
1월 01, 2025 5:44:30 오후 org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection
INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@4ed4a7e4] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode.
Hibernate:
create table Member (
id bigint not null,
name varchar(255),
primary key (id)
)
1월 01, 2025 5:44:30 오후 org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection
INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@134ff8f8] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode.
Hibernate:
/* insert for
hellojpa.Member */insert
into
Member (name, id)
values
(?, ?)
drop하고 create가 됩니다...
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. dornrrk3님.
애플리케이션을 실행할 때마다 JPA의 EntityManager
와 EntityTransaction
을 사용하여 데이터를 관리하는 방법에 대해 궁금하신 것 같습니다. Member 엔티티의 데이터가 매번 초기화되고 있다는 문제는, 주로 JPA 설정 파일인 persistence.xml
의 설정과 관련이 있을 가능성이 큽니다.
먼저 확인해야 할 것은 persistence.xml
파일의 hibernate.hbm2ddl.auto
속성 값입니다. 이 속성이 create
로 설정되어 있으면, 매번 애플리케이션 실행 시 기존 테이블이 삭제되고 새로 생성됩니다. 따라서 데이터가 사라질 수 있습니다. 이를 방지하기 위해 속성을 update
로 설정해 보세요.
관련된 실제 해결 사례는 아래 링크에서 참고할 수 있습니다:
위의 질문들은 JPA 설정 문제 해결에 대해서 논의하고 있으며, 특히 데이터보존 관련 설정이 주를 이루고 있습니다.
읽어보신 후에도 해결되지 않는다면, 현재 persistence.xml
파일의 내용을 공유해 주시면 더 구체적인 도움을 드릴 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
해결했습니다 감사합니다