2017-12-30 75 views
0

간단한 테이블 (ActivityLog)이 있고 다른 테이블 (User)에 대한 FK 인 PK가 있어야합니다.Spring과 JPA 2.0 - OneToOne을 통한 단일 값 기본 키

내가 가지고있는 공통점이있는 것 같아서이 위키 책을 따르려고했습니다. Primary Keys through OneToOne and ManyToOne Relationships. 여기의 예에는 복합 키가 포함되어 있습니다. 불행하게도 내가 무엇입니까

@Entity 
public class User { 
@Id 
private Long id; 

// other stuff 
} 

@Entity 
public class ActivityLog { 
@Id 
@OneToOne(optional = false) 
@JoinColumn(name="user_id", referencedColumnName="id") 
private User user; 

// other stuff 
} 

: 난 그냥 기본 키가 필요합니다, 그래서 함께 결국

Caused by: java.lang.IllegalArgumentException: This class [class com.example.ActivityLog] does not define an IdClass 
at org.hibernate.metamodel.internal.AbstractIdentifiableType.getIdClassAttributes(AbstractIdentifiableType.java:183) 
at org.springframework.data.jpa.repository.support.JpaMetamodelEntityInformation$IdMetadata.<init>(JpaMetamodelEntityInformation.java:253) 

내가 함께 ActivityLog에 주석을 시도 :

@IdClass(Long.class) 

(심지어에서 비록 내가 이해할 수있는 것은 복합 키에만 적용됨), 똑같은 오류가 발생합니다.

필자가 언급 한 위키 책과 다른 점이 있습니까?

봄이 잘못입니까? (this question?에서 제안 된대로).

+0

https://docs.jboss.org/hibernate/orm/current/userguide/html_single/ Hibernate_User_Guide.html # identifiers-derived –

+0

감사합니다. @JBNizet. '@ MapsId'는 갈 길이었습니다! – tasza

답변

0

이 도움이 될 것입니다 Btw는

@Entity 
public class ActivityLog { 

    @Id 
    @Column(name = "user_id") 
    private Long id; 

    @OneToOne(optional = false) 
    @JoinColumn(name="user_id", referencedColumnName="id") 
    private User user; 

    // other stuff 
} 

합니다. 아마도 사용자 당 더 많은 로그가 필요하므로 어쨌든 추가 (생성 된) ID가 필요할 것입니다.