HHH-9114 bugについては、の回避策は、マイケルの作品である。 (両方@Id
と@Type
はまだ動作し、ユーザタイプのために追加しなければならないことに注意してください)
// TODO: https://hibernate.atlassian.net/browse/HHH-9114
@Override @Id
public long getTwitterUserId() {
return super.getTwitterUserId();
}
@Override @Id
public DateTime getFetchTime() {
return super.getFetchTime();
}
をスキーマ生成で使用する場合ところで、回避策はnasty side-effect HHH-9350を持っている、それは:TwitterListedCount
に追加することによって、私の場合複合列を複製生成:
CREATE TABLE buzz.twitterlistedcount
(
id_fetchtime timestamp without time zone NOT NULL,
id_twitteruserid bigint NOT NULL,
_identifiermapper_fetchtime timestamp without time zone NOT NULL,
_identifiermapper_twitteruserid bigint NOT NULL,
listedcount integer NOT NULL,
CONSTRAINT twitterlistedcount_pkey PRIMARY KEY (id_fetchtime, id_twitteruserid)
)
WITH (
OIDS=FALSE
);
私はまったく@MappedSuperclass
を使用しないしようとしましたが、間違ったスキーマ生成はまだ起こります。 BTW私はDefaultComponentSafeNamingStrategy
を使用しています。これはバグがある場所です。これは、適切な回避策Hibernate find with composite key. Invalid column name Exception
に尋ねた、おそらく別のバグであるスキーマ生成とよく働く、手動@Column(name=)
を加えることを含む:
FYI
@Id
@Basic()
@Column(name="twitteruserid")
private long twitterUserId = 0;
@Id
@Basic()
@Column(name="fetchtime")
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime")
private DateTime fetchTime = null;
Spring Data JPAと一緒に使用する場合、それはに必須です@Id
と@Type
アノテーションを削除します(MappedSuperclass
)。これらが削除されないと、エラーが発生します。 は、このHibernateバグ、BTWの性質を変更しません。
JPA仕様から
org.springframework.data.mapping.model.MappingException: Ambiguous mapping! Annotation Id configured on field twitterUserId and one of its accessor methods in class TwitterFollowerCount!
at org.springframework.data.mapping.model.AnnotationBasedPersistentProperty.populateAnnotationCache(AnnotationBasedPersistentProperty.java:111)
at org.springframework.data.mapping.model.AnnotationBasedPersistentProperty.<init>(AnnotationBasedPersistentProperty.java:66)
at org.springframework.data.jpa.mapping.JpaPersistentPropertyImpl.<init>(JpaPersistentPropertyImpl.java:86)
at org.springframework.data.jpa.mapping.JpaMetamodelMappingContext.createPersistentProperty(JpaMetamodelMappingContext.java:67)
at org.springframework.data.jpa.mapping.JpaMetamodelMappingContext.createPersistentProperty(JpaMetamodelMappingContext.java:35)
at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.createAndRegisterProperty(AbstractMappingContext.java:449)
at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.doWith(AbstractMappingContext.java:427)
at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:607)
at org.springframework.data.mapping.context.AbstractMappingContext.addPersistentEntity(AbstractMappingContext.java:295)
at org.springframework.data.mapping.context.AbstractMappingContext.addPersistentEntity(AbstractMappingContext.java:257)
at org.springframework.data.mapping.context.AbstractMappingContext.initialize(AbstractMappingContext.java:373)
at org.springframework.data.jpa.repository.config.JpaRepositoryConfigExtension$JpaMetamodelMappingContextFactoryBean.createInstance(JpaRepositoryConfigExtension.java:216)
at org.springframework.data.jpa.repository.config.JpaRepositoryConfigExtension$JpaMetamodelMappingContextFactoryBean.createInstance(JpaRepositoryConfigExtension.java:169)
at org.springframework.beans.factory.config.AbstractFactoryBean.afterPropertiesSet(AbstractFactoryBean.java:134)
at org.springframework.data.jpa.repository.config.JpaRepositoryConfigExtension$JpaMetamodelMappingContextFactoryBean.afterPropertiesSet(JpaRepositoryConfigExtension.java:230)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1612)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1549)
... 40 more
私はいくつかの意見を得るが答えはないので、この星座は不可能であると私は仮定すべきである。私はちょうどドキュメントのヒントを見つけることができません.... – austrianuser