강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

ojw970725님의 프로필 이미지
ojw970725

작성한 질문수

Cleaning up connection pool

작성

·

1.2K

0

안녕하세요! 

강의 정말 잘듣고있습니다!! :)

강의듣고 혼자 코드 작성해보던 중에 해결되지 않는 에러가 발생해서 질문 남깁니다.

계속 잘 돌아가다가 갑자기 Member, Team insert기능도 안되네요ㅜㅜ

질문들 찾아보고 h2 버전도 내려보고 했는데 해결이 안되네요ㅜ

DB에 아예 insert가 안되는데 갑자기 왜 이러는건가요?

jpaMain

package hellojpa;

import javax.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 t1=new Team();
t1.setName("team1");
t1.setId(1L);
em.persist(t1);

Member m1=new Member();
m1.setUsername("member1");
m1.setAge(1);
m1.setTeam(t1);
em.persist(m1);

Member m2=new Member();
m2.setUsername("member2");
m2.setAge(2);
em.persist(m2);


// em.flush();
// em.clear();
// System.out.println("--------------");
// String s="select m from Member m JOIN m.team t";
// List<UserDto > result= em.createQuery(s,UserDto.class).getResultList();
// for(UserDto o:result){
// System.out.println(o.getUsername()+" "+o.getAge());
// }

tx.commit(); // 쿼리 날림
} catch(Exception e){
tx.rollback();;
}finally {
em.close();
}
emf.close();

}
}

Member

package hellojpa;

import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;

@Entity
@SequenceGenerator(
name = "MEMBER_SEQ_GENERATOR",
sequenceName = "MEMBER_SEQ", //매핑할 데이터베이스 시퀀스 이름
initialValue = 1, allocationSize = 50)
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator="MEMBER_SEQ_GENERATOR")
@Column(name="MEMBER_ID")
private Long id;

@Column(name="USERNAME")
private String username;

private int age;

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}
// @Column(name="TEAM_ID")
// private Long teamId;

@ManyToOne
@JoinColumn(name="TEAM_ID")
private Team team;

// @ElementCollection
// @CollectionTable(name="FAVORITE_FOOD",joinColumns =
// @JoinColumn(name="MEMBER_ID"))
// @Column(name="FOOD_NAME")
// private Set<String> favoriteFoods=new HashSet<>();

public Team getTeam() {
return team;
}

public void setTeam(Team team) {
this.team = team;
}

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}
}

Team

package hellojpa;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;

@Entity
public class Team {
@Id
@GeneratedValue
Long id;

String name;

@OneToMany(mappedBy = "team")
List<Member> members=new ArrayList<>();


public List<Member> getMembers() {
return members;
}

public void setMembers(List<Member> members) {
this.members = members;
}

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

UserDto

package hellojpa;

public class UserDto {

private String username;
private int age;

public String getUsername() {
return username;
}

public int getAge() {
return age;
}

public UserDto(String username, int age) {
this.username = username;
this.age = age;
}
}

에러

"C:\Program Files\ojdkbuild\java-1.8.0-openjdk-1.8.0.181-1\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.1\lib\idea_rt.jar=52868:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.1.1\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\ojdkbuild\java-1.8.0-openjdk-1.8.0.181-1\jre\lib\charsets.jar;C:\Program Files\ojdkbuild\java-1.8.0-openjdk-1.8.0.181-1\jre\lib\ext\access-bridge-64.jar;C:\Program Files\ojdkbuild\java-1.8.0-openjdk-1.8.0.181-1\jre\lib\ext\cldrdata.jar;C:\Program Files\ojdkbuild\java-1.8.0-openjdk-1.8.0.181-1\jre\lib\ext\dnsns.jar;C:\Program Files\ojdkbuild\java-1.8.0-openjdk-1.8.0.181-1\jre\lib\ext\jaccess.jar;C:\Program Files\ojdkbuild\java-1.8.0-openjdk-1.8.0.181-1\jre\lib\ext\localedata.jar;C:\Program Files\ojdkbuild\java-1.8.0-openjdk-1.8.0.181-1\jre\lib\ext\nashorn.jar;C:\Program Files\ojdkbuild\java-1.8.0-openjdk-1.8.0.181-1\jre\lib\ext\sunec.jar;C:\Program Files\ojdkbuild\java-1.8.0-openjdk-1.8.0.181-1\jre\lib\ext\sunjce_provider.jar;C:\Program Files\ojdkbuild\java-1.8.0-openjdk-1.8.0.181-1\jre\lib\ext\sunmscapi.jar;C:\Program Files\ojdkbuild\java-1.8.0-openjdk-1.8.0.181-1\jre\lib\ext\sunpkcs11.jar;C:\Program Files\ojdkbuild\java-1.8.0-openjdk-1.8.0.181-1\jre\lib\ext\zipfs.jar;C:\Program Files\ojdkbuild\java-1.8.0-openjdk-1.8.0.181-1\jre\lib\jce.jar;C:\Program Files\ojdkbuild\java-1.8.0-openjdk-1.8.0.181-1\jre\lib\jsse.jar;C:\Program Files\ojdkbuild\java-1.8.0-openjdk-1.8.0.181-1\jre\lib\management-agent.jar;C:\Program Files\ojdkbuild\java-1.8.0-openjdk-1.8.0.181-1\jre\lib\resources.jar;C:\Program Files\ojdkbuild\java-1.8.0-openjdk-1.8.0.181-1\jre\lib\rt.jar;C:\Users\82103\IdeaProjects\jpa\ex1-hello-jpa\target\classes;C:\Users\82103\.m2\repository\org\hibernate\hibernate-entitymanager\5.3.10.Final\hibernate-entitymanager-5.3.10.Final.jar;C:\Users\82103\.m2\repository\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;C:\Users\82103\.m2\repository\org\hibernate\hibernate-core\5.3.10.Final\hibernate-core-5.3.10.Final.jar;C:\Users\82103\.m2\repository\org\javassist\javassist\3.23.2-GA\javassist-3.23.2-GA.jar;C:\Users\82103\.m2\repository\antlr\antlr\2.7.7\antlr-2.7.7.jar;C:\Users\82103\.m2\repository\org\jboss\jandex\2.0.5.Final\jandex-2.0.5.Final.jar;C:\Users\82103\.m2\repository\com\fasterxml\classmate\1.3.4\classmate-1.3.4.jar;C:\Users\82103\.m2\repository\javax\activation\javax.activation-api\1.2.0\javax.activation-api-1.2.0.jar;C:\Users\82103\.m2\repository\org\dom4j\dom4j\2.1.1\dom4j-2.1.1.jar;C:\Users\82103\.m2\repository\org\hibernate\common\hibernate-commons-annotations\5.0.4.Final\hibernate-commons-annotations-5.0.4.Final.jar;C:\Users\82103\.m2\repository\javax\persistence\javax.persistence-api\2.2\javax.persistence-api-2.2.jar;C:\Users\82103\.m2\repository\net\bytebuddy\byte-buddy\1.9.5\byte-buddy-1.9.5.jar;C:\Users\82103\.m2\repository\org\jboss\spec\javax\transaction\jboss-transaction-api_1.2_spec\1.1.1.Final\jboss-transaction-api_1.2_spec-1.1.1.Final.jar;C:\Users\82103\.m2\repository\com\h2database\h2\1.4.200\h2-1.4.200.jar" hellojpa.JpaMain

8월 16, 2021 9:54:39 오전 org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation

INFO: HHH000204: Processing PersistenceUnitInfo [

name: hello

...]

8월 16, 2021 9:54:39 오전 org.hibernate.Version logVersion

INFO: HHH000412: Hibernate Core {5.3.10.Final}

8월 16, 2021 9:54:39 오전 org.hibernate.cfg.Environment <clinit>

INFO: HHH000206: hibernate.properties not found

8월 16, 2021 9:54:40 오전 org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>

INFO: HCANN000001: Hibernate Commons Annotations {5.0.4.Final}

8월 16, 2021 9:54:43 오전 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure

WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!)

8월 16, 2021 9:54:43 오전 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator

INFO: HHH10001005: using driver [org.h2.Driver] at URL [jdbc:h2:tcp://localhost/~/test]

8월 16, 2021 9:54:43 오전 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator

INFO: HHH10001001: Connection properties: {user=sa}

8월 16, 2021 9:54:43 오전 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator

INFO: HHH10001003: Autocommit mode: false

8월 16, 2021 9:54:43 오전 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections <init>

INFO: HHH000115: Hibernate connection pool size: 20 (min=1)

8월 16, 2021 9:54:43 오전 org.hibernate.dialect.Dialect <init>

INFO: HHH000400: Using dialect: org.hibernate.dialect.H2Dialect

Hibernate: 

    

    drop table Member if exists

Hibernate: 

    

    drop table Team if exists

Hibernate: 

    

    drop sequence if exists hibernate_sequence

Hibernate: 

    

    drop sequence if exists MEMBER_SEQ

8월 16, 2021 9:54:45 오전 org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection

INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@581d969c] 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 sequence hibernate_sequence start with 1 increment by 1

Hibernate: create sequence MEMBER_SEQ start with 1 increment by 50

Hibernate: 

    

    create table Member (

       MEMBER_ID bigint not null,

        age integer not null,

        USERNAME varchar(255),

        TEAM_ID bigint,

        primary key (MEMBER_ID)

    )

Hibernate: 

    

    create table Team (

       id bigint not null,

        name varchar(255),

        primary key (id)

    )

Hibernate: 

    

    alter table Member 

       add constraint FKl7wsny760hjy6x19kqnduasbm 

       foreign key (TEAM_ID) 

       references Team

8월 16, 2021 9:54:45 오전 org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection

INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@7cd1ac19] 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.

8월 16, 2021 9:54:45 오전 org.hibernate.tool.schema.internal.SchemaCreatorImpl applyImportSources

INFO: HHH000476: Executing import script 'org.hibernate.tool.schema.internal.exec.ScriptSourceInputNonExistentImpl@69c43e48'

8월 16, 2021 9:54:45 오전 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl stop

INFO: HHH10001008: Cleaning up connection pool [jdbc:h2:tcp://localhost/~/test]

Process finished with exit code 0

답변주시면 감사합니다!

답변 2

2

안녕하세요. ojw970725님

아무것도 안보이는 현상은 예외가 발생했기 때문입니다.

다음과 같이 예외 출력을 추가하면 예외를 볼 수 있는데요.

} catch(Exception e){
e.printStackTrace(); //추가
tx.rollback();;

이번 문제는 @Id에 @GeneratedValue를 사용하셨습니다.

이 상태에 다음과 같이 id를 설정해주었습니다.

Team t1=new Team();
t1.setName("team1");
t1.setId(1L); //여기가 문제
em.persist(t1);

id를 JPA가 생성해야 하는데 임의로 id 값을 입력해서 문제가 발생했습니다.

해당 부분을 제거하시면 됩니다.

감사합니다.

0

안녕하세요. ojw970725님

전체 코드를 압축해서 구글 드라이브에 업로드해서 공유해주세요.

구글 드라이브 업로드 방법은 다음을 참고해주세요.

https://bit.ly/3fX6ygx

감사합니다.

ojw970725님의 프로필 이미지
ojw970725
질문자

업로드했습니다! 

ojw970725님의 프로필 이미지
ojw970725
질문자

https://drive.google.com/file/d/1NczSoJh0q0tOvv_MRi9z7-zkfkgd_bXA/view?usp=sharing

ojw970725님의 프로필 이미지
ojw970725

작성한 질문수

질문하기