작성
·
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님
전체 코드를 압축해서 구글 드라이브에 업로드해서 공유해주세요.
구글 드라이브 업로드 방법은 다음을 참고해주세요.
감사합니다.
업로드했습니다!