1

使用 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

我遇到以下异常:

线程“主”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 不会创建任何表并引发异常。我怀疑我在地图上遗漏了一些注释,但我一直无法找到一个将键和值都作为实体的地图的示例。

4

1 回答 1

1

似乎是一个错误。尝试最新版本,如果仍然出现,请记录错误。

您还可以创建另一个实体类来表示三向连接表,而不是使用 Map。

于 2012-05-10T14:28:55.273 回答