Java Hibernate/JPA:QueryException当Hibernate为@ElementCollection生成元模型时

Java Hibernate/JPA:QueryException当Hibernate为@ElementCollection生成元模型时,java,hibernate,jpa,hibernate-mapping,Java,Hibernate,Jpa,Hibernate Mapping,我尝试使用hibernate 4.3.1.Final在实体中持久化@ElementCollection。实体如下所示: import javax.persistence.*; 导入java.util.Map; @实体 公共类MyEntity{ @身份证 @GeneratedValue(策略=GenerationType.AUTO) 私有整数id; @元素集合 私人地图; @可嵌入 公共静态类复合键{ @基本的 私有整数密钥1; @基本的 私有整数密钥2; } @可嵌入 公共静态类Composit

我尝试使用hibernate 4.3.1.Final在实体中持久化
@ElementCollection
。实体如下所示:

import javax.persistence.*;
导入java.util.Map;
@实体
公共类MyEntity{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私有整数id;
@元素集合
私人地图;
@可嵌入
公共静态类复合键{
@基本的
私有整数密钥1;
@基本的
私有整数密钥2;
}
@可嵌入
公共静态类CompositeValue{
@基本的
私有整数val1;
@基本的
私有整数val2;
}
}
Hibernate正确生成架构:

create table MyEntity(id integer不为null,主键(id))ENGINE=InnoDB;
创建表MyEntity_map(MyEntity_id integer非空、val1 integer、val2 integer、key1 integer、key2 integer、主键(MyEntity_id、key1、key2))引擎=InnoDB;
创建表ReferencedEntity(id整数不为null,主键(id))引擎=InnoDB;
alter table MyEntity_映射添加约束FK_mhu8q8dtieguddm0w4gxfwhnc外键(MyEntity_id)引用MyEntity(id);

但是当我将
CompositeKey
更改为引用另一个
实体时,当hibernate在启动时生成元模型时,我会得到一个
QueryException

更改后的代码:

@可嵌入
公共静态类复合键{
@许多酮
私有引用实体键1;
@基本的
私有整数密钥2;
}
引用的
实体

import javax.persistence.*;
@实体
公共类引用实体{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私有整数id;
}
例外情况:

原因:org.hibernate.QueryException:无法解析属性:key1 of:component[val1,val2]
在org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:83)~[AbstractPropertyMapping.class:4.3.1.Final]
在org.hibernate.persister.entity.AbstractPropertyMapping.toColumns(AbstractPropertyMapping.java:98)~[AbstractPropertyMapping.class:4.3.1.Final]
在org.hibernate.persister.collection.AbstractCollectionPersister.toColumns(AbstractCollectionPersister.java:1625)~[AbstractCollectionPersister.class:4.3.1.Final]
在org.hibernate.loader.plan.build.internal.spaces.CompositePropertyMapping.toColumns(CompositePropertyMapping.java:124)~[CompositePropertyMapping.class:4.3.1.Final]
在org.hibernate.loader.plan.build.internal.spaces.CompositeQuerySpaceImpl.toAliasedColumns(CompositeQuerySpaceImpl.java:52)~[CompositeQuerySpaceImpl.class:4.3.1.Final]
在org.hibernate.loader.plan.build.internal.spaces.JoinImpl.resolveAliasedLeftHandSideJoinConditionColumns(JoinImpl.java:79)~[JoinImpl.class:4.3.1.Final]
在org.hibernate.loader.plan.exec.internal.LoadQueryJoinAndFetchProcessor.addJoins(LoadQueryJoinAndFetchProcessor.java:261)~[LoadQueryJoinAndFetchProcessor.class:4.3.1.Final]
在org.hibernate.loader.plan.exec.internal.LoadQueryJoinAndFetchProcessor.renderEntityJoin(LoadQueryJoinAndFetchProcessor.java:193)~[LoadQueryJoinAndFetchProcessor.class:4.3.1.Final]
在org.hibernate.loader.plan.exec.internal.LoadQueryJoinAndFetchProcessor.renderJoin(LoadQueryJoinAndFetchProcessor.java:158)~[LoadQueryJoinAndFetchProcessor.class:4.3.1.Final]
在org.hibernate.loader.plan.exec.internal.LoadQueryJoinAndFetchProcessor.processQuerySpaceJoin(LoadQueryJoinAndFetchProcessor.java:137)~[LoadQueryJoinAndFetchProcessor.class:4.3.1.Final]
在org.hibernate.loader.plan.exec.internal.LoadQueryJoinAndFetchProcessor.processQuerySpaceJoins(LoadQueryJoinAndFetchProcessor.java:132)~[LoadQueryJoinAndFetchProcessor.class:4.3.1.Final]
在org.hibernate.loader.plan.exec.internal.LoadQueryJoinAndFetchProcessor.processQuerySpaceJoin(LoadQueryJoinAndFetchProcessor.java:138)~[LoadQueryJoinAndFetchProcessor.class:4.3.1.Final]
在org.hibernate.loader.plan.exec.internal.LoadQueryJoinAndFetchProcessor.processQuerySpaceJoins(LoadQueryJoinAndFetchProcessor.java:132)~[LoadQueryJoinAndFetchProcessor.class:4.3.1.Final]
在org.hibernate.loader.plan.exec.internal.LoadQueryJoinAndFetchProcessor.processQuerySpaceJoins(LoadQueryJoinAndFetchProcessor.java:113)~[LoadQueryJoinAndFetchProcessor.class:4.3.1.Final]
在org.hibernate.loader.plan.exec.internal.AbstractLoadQueryDetails.generate(AbstractLoadQueryDetails.java:171)~[AbstractLoadQueryDetails.class:4.3.1.Final]
在org.hibernate.loader.plan.exec.internal.BasicCollectionLoadQueryDetails.(BasicCollectionLoadQueryDetails.java:60)~[BasicCollectionLoadQueryDetails.class:4.3.1.Final]
在org.hibernate.loader.plan.exec.internal.BatchingLoadQueryDetailsFactory.makeCollectionLoadQueryDetails(BatchingLoadQueryDetailsFactory.java:101)~[BatchingLoadQueryDetailsFactory.class:4.3.1.Final]
在org.hibernate.loader.collection.plan.AbstractLoadPlanBasedCollectionInitializer.(AbstractLoadPlanBasedCollectionInitializer.java:77)~[AbstractLoadPlanBasedCollectionInitializer.class:4.3.1.Final]
在org.hibernate.loader.collection.plan.CollectionLoader.(CollectionLoader.java:112)~[CollectionLoader.class:4.3.1.Final]
在org.hibernate.loader.collection.plan.CollectionLoader$Builder.byKey(CollectionLoader.java:105)~[CollectionLoader$Builder.class:4.3.1.Final]
在org.hibernate.loader.collection.plan.AbstractBatchingCollectionInitializerBuilder.buildNonBatchingLoader(AbstractBatchingCollectionInitializerBuilder.java:45)~[AbstractBatchingCollectionInitializerBuilder.class:4.3.1.Final]
在org.hibernate.loader.collection.BatchingCollectionInitializerBuilder.CreateBachingCollectionInitializerBuilder(BatchingCollectionInitializerBuilder.java:71)~[BatchingCollectionInitializerBuilder.class:4.3.1.Final]
位于org.hibernate.persister.collection.BasicCollectionPersister.c
@Entity
public class CompositeKey {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    @ManyToOne(targetEntity = ReferencedEntity.class)
    private ReferencedEntity key1;

    @Basic
    private Integer key2;

}