当前位置: 首页 > 知识库问答 >
问题:

使用JPA的持久性表示实体不存在于描述符中

丁正阳
2023-03-14

我们在尝试用数据库实现梯子游戏应用程序时遇到了一个问题。我们有一个名为'spill'的实体,它与另一个名为'brett'的实体有一个ManyToOne关系。

Exception [EclipseLink-93] (Eclipse Persistence Services - 2.6.0.v20150309-bf26070): org.eclipse.persistence.exceptions.DescriptorException
Exception Description: The table [brett] is not present in this descriptor.
Descriptor: RelationalDescriptor(no.hib.dat101.entities.Spill --> [DatabaseTable(stigespill.spill)])

Exception [EclipseLink-41] (Eclipse Persistence Services - 2.6.0.v20150309-bf26070): org.eclipse.persistence.exceptions.DescriptorException
Exception Description: A non-read-only mapping must be defined for the sequence number field.
Descriptor: RelationalDescriptor(no.hib.dat101.entities.Spill --> [DatabaseTable(stigespill.spill)])
@Entity
@Table(name="spill",schema = "stigespill")
@Entity
@Table(name="spill",schema = "stigespill")
public class Spill {

  // FELTVARIABLER
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Integer spillid;

  private Integer ferdig;
  private Timestamp dato;

  @OneToMany(mappedBy = "spill" , cascade = CascadeType.ALL)
  private List<Spiller> spillere; // TODO Skiftet fra Queue til ArrayList

  @OneToMany(mappedBy = "spill" , cascade = CascadeType.ALL)
  private List<Trekk> trekklog;

  @ManyToOne( cascade = CascadeType.ALL)
  @JoinColumn(name = "brett", referencedColumnName="brettid", insertable = false, updatable = false)
  private Brett brett;
}
@Entity
@Table(name = "brett", schema = "stigespill")
public class Brett {

  // FELTVARIABLER
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Integer brettid;

  @OneToMany(mappedBy = "brett", cascade = CascadeType.ALL)
  private List<Rute> ruter;
}

在过去的几个小时里,我们一直在网上搜索,试图找出这个问题,但我们找不到解决办法。

完整控制台日志:

[EL Info]: server: 2016-04-26 15:58:15.551--ServerSession(1348949648)--Detected server platform: org.eclipse.persistence.platform.server.NoServerPlatform.
[EL Warning]: metadata: 2016-04-26 15:58:15.876--ServerSession(1348949648)--The reference column name [spillid] mapped on the element [field spill] does not correspond to a valid id or basic field/column on the mapping reference. Will use referenced column name as provided.
[EL Info]: server: 2016-04-26 15:58:15.951--ServerSession(1348949648)--Detected server platform: org.eclipse.persistence.platform.server.NoServerPlatform.
[EL Info]: 2016-04-26 15:58:16.63--ServerSession(1348949648)--EclipseLink, version: Eclipse Persistence Services - 2.6.0.v20150309-bf26070
[EL Severe]: 2016-04-26 15:58:17.084--ServerSession(1348949648)--Exception [EclipseLink-0] (Eclipse Persistence Services - 2.6.0.v20150309-bf26070): org.eclipse.persistence.exceptions.IntegrityException

Exception[EclipseLink-93](Eclipse Persistence Services-2.6.0.v20150309-BF26070):org.Eclipse.Persistence.exceptions.DescriptoreXception 异常说明:表[brett]不存在于此描述符中。 描述符:RelationalDescriptor(No.hib.dat101.entities.spill-->[databasetable(stigespill.spill)])

Exception[EclipseLink-93](Eclipse Persistence Services-2.6.0.v20150309-BF26070):org.Eclipse.Persistence.exceptions.DescriptoreXception 异常说明:表[brett]不存在于此描述符中。 描述符:RelationalDescriptor(No.hib.dat101.entities.spill-->[databasetable(stigespill.spill)])

Exception[EclipseLink-41](Eclipse Persistence Services-2.6.0.v20150309-BF26070):org.Eclipse.Persistence.exceptions.DescriptoreXception 异常说明:必须为序号字段定义非只读映射。 描述符:RelationalDescriptor(No.hib.dat101.entities.spill-->[databasetable(stigespill.spill)])

线程“main”javax.Persistence.persistenceException:Exception[EclipseLink-28019](Eclipse Persistence Services-2.6.0.v20150309-bf26070):org.Eclipse.Persistence.exceptions.EntityManagerSetupException 异常说明:PersistenceUnit[eclipselink]部署失败。关闭此PersistenceUnit的所有工厂。 内部异常:Exception[EclipseLink-0](Eclipse Persistence Services-2.6.0.v20150309-BF26070):org.Eclipse.Persistence.exceptions.IntegrityException

Exception[EclipseLink-41](Eclipse Persistence Services-2.6.0.v20150309-BF26070):org.Eclipse.Persistence.exceptions.DescriptoreXception 异常说明:必须为序号字段定义非只读映射。 描述符:RelationalDescriptor(No.hib.dat101.entities.spill-->[databasetable(stigespill.spill)])

at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.createDeployFailedPersistenceException(EntityManagerSetupImpl.java:866)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:806)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.getAbstractSession(EntityManagerFactoryDelegate.java:205)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.createEntityManagerImpl(EntityManagerFactoryDelegate.java:305)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:337)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:303)
at no.hib.dat101.database.Emh.slettAlt(Emh.java:137)
at no.hib.dat101.main.Main_Tekst.main(Main_Tekst.java:12)

原因:Exception[EclipseLink-28019](Eclipse Persistence Services-2.6.0.v20150309-bf26070):org.Eclipse.Persistence.exceptions.EntityManagerSetupException 异常说明:PersistenceUnit[eclipselink]部署失败。关闭此PersistenceUnit的所有工厂。 内部异常:Exception[EclipseLink-0](Eclipse Persistence Services-2.6.0.v20150309-BF26070):org.Eclipse.Persistence.exceptions.IntegrityException

Exception[EclipseLink-93](Eclipse Persistence Services-2.6.0.v20150309-BF26070):org.Eclipse.Persistence.exceptions.DescriptoreXception 异常说明:表[brett]不存在于此描述符中。 描述符:RelationalDescriptor(No.hib.dat101.entities.spill-->[databasetable(stigespill.spill)])

at org.eclipse.persistence.exceptions.EntityManagerSetupException.deployFailed(EntityManagerSetupException.java:239)
... 8 more

共有1个答案

夏建木
2023-03-14

在一个例子中,为了让@table正常工作,我还必须添加catalog。另外,我必须在@entity中命名表。尝试:

@Entity(name="spill")
@Table(name="spill",schema = "stigespill", catalog="public")

等等。

 类似资料:
  • 很难弄清楚我是在打虫子还是在做傻事... Spring Boot v2.0.0. M7,sping-data-jpa,sping-data-rest,MySQL 以下@Query 在一个上抛出一个 statusCode是一个varchar,本身作为@Entity按预期工作,但试图投影到字符串列表(或

  • 我试图集成Spring和JSF,我坚持使用对象。我不想处理事务(begin-commit等) 经过一些谷歌,我可以找到一个答案,给我需要在这个链接 我使用eclipselink作为ORM和Oracle 11g数据库,并使用带有Maven的Glassfish Server3.1。我更喜欢Spring配置的注释。我用 相关类中的注释。我的名称是E_DefterManagementPU,我的事务类型是J

  • 问题内容: 我最近开始玩Play!Java框架1.2.3版(最新)。在测试框架时,尝试在名为的Hibernate实体中保留对象时遇到了一个奇怪的问题。地图对象映射长到Hibernate的实体,我呼吁,随着申报 我的问题如下:按照我的注释创建正确的表。但是,当对象持久化时,其中的数据就不会! 这是我用于实体的代码。首先是: 这里是: 这是我用来测试设置的课程: 表演!框架会自动为HTTP请求创建一个

  • 问题内容: 我最近开始玩Play!Java框架1.2.3版(最新)。在测试框架时,尝试在名为的Hibernate实体中保留对象时遇到了一个奇怪的问题。地图对象映射长到Hibernate的实体,我呼吁,随着申报 我的问题如下:按照我的注释创建正确的表。但是,当对象持久化时,其中的数据就不会! 这是我用于实体的代码。首先是: 这里是: 这是我用来测试设置的课程: 表演!框架会自动为HTTP请求创建一个

  • 我与以下实体类有一个双向的一对多关系: 当然,所有必需的级联选项都是在客户端设置的。但如果在引用现有产品订单时首次持久化新创建的客户端(如本场景所示),则它将不起作用: 已创建并持久化产品订单“%1”。工作正常。 已创建客户端“%2”,并将产品订单“%1”添加到其产品订单列表中。然后它被持久化。不起作用。 我尝试了几个apporach,但没有一个显示出预期的结果。请参阅下面的结果。我在这里阅读了所

  • 问题内容: 分离通过EntityManager获取的特定JPA实体Bean的最简单方法是什么。或者,我是否可以首先通过查询返回分离的对象,使它们本质上充当“只读”对象? 之所以这样做,是因为我想修改Bean中的数据- 仅在我的应用程序中,而从未将其持久化到数据库中。在我的程序中,我最终不得不在EntityManager上调用flush(),该操作将保留从连接的实体到底层数据库的所有更改,但是我想排