【发布时间】:2012-05-10 00:16:05
【问题描述】:
使用 EclipseLink 为以下模型生成数据库表时遇到异常:
@Entity
@Table(name="RXRACTSPOT")
public class ActivitySpot implements Serializable,IsSerializable {
.....
@OneToMany
private Map<CustomAttributeDefinition, CustomAttributeRestriction> customAttributes;
--
@Entity
@Table(name="RXRCUSTATTRREST")
public class CustomAttributeRestriction implements Serializable
--
@Entity
@Table(name="RXRCUSTATTRDEF")
public class CustomAttributeDefinition implements Serializable
我遇到以下异常:
线程“main”javax.persistence.PersistenceException 中的异常:异常>[EclipseLink-0](Eclipse Persistence Services - 2.1.2.v20101206-r8635):org.eclipse.persistence.exceptions.IntegrityException
描述符异常:
异常 [EclipseLink-93] (Eclipse Persistence Services - 2.1.2.v20101206-r8635): org.eclipse.persistence.exceptions.DescriptorException 异常描述:该描述符中不存在表 [RXRCUSTATTRREST]。 描述符:RelationalDescriptor(com.rubiconred.activitystream.core.model.ActivitySpot --> [DatabaseTable(RXRACTSPOT)])
运行时异常:
java.lang.IndexOutOfBoundsException:索引:0,大小:0
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:417)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.getServerSession(EntityManagerFactoryImpl.java:164)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:221)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:209)
at com.rubiconred.activitystream.database.ActivityStreamDatabaseUtils.dropAndCreateTables(ActivityStreamDatabaseUtils.java:64)
at com.rubiconred.soauiext.server.db.CreateOneSpotDatabases.main(CreateOneSpotDatabases.java:16)
原因:异常 [EclipseLink-0] (Eclipse Persistence Services - 2.1.2.v20101206-r8635): org.eclipse.persistence.exceptions.IntegrityException
如果我删除 RXRACTSPOT 中的 Map,则成功创建表 RXRCUSTATTREST 和 RXRCUSTATTRDEF。使用 Map 不会创建任何表并引发异常。我怀疑我在地图上遗漏了一些注释,但我一直无法找到将键和值都作为实体的地图的示例。
【问题讨论】:
-
你发现了吗?我在 2.5.0-M6 上遇到了同样的问题
标签: jpa