2017-12-30 34 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

これは役立つはず:

@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が必要になると思います。

関連する問題