👉 기본 환경
- Language: Java
- DB: H2 Database
- IDE: IntelliJ
⌨️ 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
@Entity
public class MemberUsingEm {
@Id @GeneratedValue
private long id;
private String username;
// Period
@Embedded
private Period workPeriod;
// Address
@Embedded
private Address homeAddress;
@Embedded
private Address workAddress;
}
|
🖨️오류
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
WARN: HHH000457: Joined inheritance hierarchy [jpa_basic.Item] defined explicit @DiscriminatorColumn. Legacy Hibernate behavior was to ignore the @DiscriminatorColumn. However, as part of issue HHH-6911 we now apply the explicit @DiscriminatorColumn. If you would prefer the legacy behavior, enable the `hibernate.discriminator.ignore_explicit_for_joined` setting (hibernate.discriminator.ignore_explicit_for_joined=true)
Exception in thread "main" javax.persistence.PersistenceException: [PersistenceUnit: hello] Unable to build Hibernate SessionFactory
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:1326)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1252)
at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:56)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
at jpa_basic.Main.main(Main.java:14)
Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: jpa_basic.MemberUsingEm column: city (should be mapped with insert="false" update="false")
at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:862)
at org.hibernate.mapping.PersistentClass.checkPropertyColumnDuplication(PersistentClass.java:880)
at org.hibernate.mapping.PersistentClass.checkPropertyColumnDuplication(PersistentClass.java:876)
at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:902)
at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:634)
at org.hibernate.mapping.RootClass.validate(RootClass.java:267)
at org.hibernate.boot.internal.MetadataImpl.validate(MetadataImpl.java:351)
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:464)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1249)
... 4 more
|
📡 원인
@Embedded 타입의 Address 객체가 homeAddress와 workAddress가 2개 존재
MemberUsingEm에서 이름이 같은 Address 컬럼들이 중복해서 생성
📰 해결 방법
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
@Entity
public class MemberUsingEm {
@Id @GeneratedValue
private long id;
private String username;
// Period
@Embedded
private Period workPeriod;
// Address
@Embedded
private Address homeAddress;
@Embedded
@AttributeOverrides({
@AttributeOverride(name="city",
column=@Column(name = "WORK_CITY")),
@AttributeOverride(name="street",
column=@Column(name = "WORK_STREET")),
@AttributeOverride(name="zipcode",
column=@Column(name = "WORK_ZIPCODE"))
})
private Address workAddress;
}
|
@AttributeOverrides 사용하여 중복되지 않는 새로운 컬럼 name 부여
🖨️ 실행 결과
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
Hibernate:
create table MemberUsingEm (
id bigint not null,
city varchar(255),
street varchar(255),
zipcode varchar(255),
username varchar(255),
WORK_CITY varchar(255),
WORK_STREET varchar(255),
WORK_ZIPCODE varchar(255),
endDate timestamp,
startDate timestamp,
primary key (id)
)
|
'Java > JPA with Error' 카테고리의 다른 글
[해결 방법] org.hibernate.QueryException (0) | 2023.09.20 |
---|---|
[해결 방법] org.hibernate.exception.ConstraintViolationException (0) | 2023.09.19 |
[해결 방법] org.hibernate.exception.ConstraintViolationException (0) | 2023.09.10 |
[해결 방법] org.hibernate.AnnotationException (0) | 2023.08.16 |
[해결 방법] org.hibernate.AnnotationException (0) | 2023.08.16 |