【问题标题】:Persistence with JPA says entity is not present in descriptorJPA 的持久性表示描述符中不存在实体
【发布时间】:2016-04-26 14:31:46
【问题描述】:

我们在尝试使用数据库实现天梯游戏应用程序时遇到了问题。我们有一个名为“Spill”的实体,它与另一个名为“Brett”的实体具有多对一关系。

但是当持久性尝试将实体映射到数据库时,它似乎找不到它们。

异常 [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)])

异常 [EclipseLink-41] (Eclipse Persistence Services - 2.6.0.v20150309-bf26070): org.eclipse.persistence.exceptions.DescriptorException
异常描述:必须为序列号字段定义非只读映射。
描述符:RelationalDescriptor(no.hib.dat101.entities.Spill --> [DatabaseTable(stigespill.spill)])

它们都在persistence.xml 文件中,并且程序似乎可以很好地连接到数据库。我们已经明确给出了名称和模式名称:

@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 警告]: metadata: 2016-04-26 15:58:15.876--ServerSession(1348949648)--映射到元素[fieldspill]上的引用列名[spillid]与有效的id或基本字段不对应/column 上的映射参考。将使用提供的引用列名。
[EL Info]:服务器:2016-04-26 15:58:15.951--ServerSession(1348949648)--检测到的服务器平台:org.eclipse.persistence.platform.server.NoServerPlatform。
[EL信息]:2016-04-26 15:58:16.63--ServerSession(1348949648)--EclipseLink,版本:Eclipse Persistence Services - 2.6.0.v20150309-bf26070
[EL 严重]:2016-04-26 15:58:17.084--ServerSession(1348949648)--异常 [EclipseLink-0] (Eclipse Persistence Services - 2.6.0.v20150309-bf26070): org.eclipse.persistence.exceptions .IntegrityException

描述符异常:

异常 [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)])

异常 [EclipseLink-41] (Eclipse Persistence Services - 2.6.0.v20150309-bf26070): org.eclipse.persistence.exceptions.DescriptorException 异常描述:必须为序列号字段定义非只读映射。 描述符:RelationalDescriptor(no.hib.dat101.entities.Spill --> [DatabaseTable(stigespill.spill)])

运行时异常:

[EL 信息]:连接:2016-04-26 15:58:17.087--ServerSession(1348949648)--/file:/Users/../Stigespill/bin/_eclipselink 注销成功 [EL 严重]:ejb:2016-04-26 15:58:17.091--ServerSession(1348949648)--异常 [EclipseLink-0] (Eclipse Persistence Services - 2.6.0.v20150309-bf26070): org.eclipse.persistence .exceptions.IntegrityException

描述符异常:

异常 [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)])

异常 [EclipseLink-41] (Eclipse Persistence Services - 2.6.0.v20150309-bf26070): org.eclipse.persistence.exceptions.DescriptorException 异常描述:必须为序列号字段定义非只读映射。 描述符:RelationalDescriptor(no.hib.dat101.entities.Spill --> [DatabaseTable(stigespill.spill)])

运行时异常:

线程“主”javax.persistence.PersistenceException 中的异常:异常 [EclipseLink-28019](Eclipse 持久性服务 - 2.6.0.v20150309-bf26070):org.eclipse.persistence.exceptions.EntityManagerSetupException 异常描述:PersistenceUnit [eclipselink] 的部署失败。关闭此 PersistenceUnit 的所有工厂。 内部异常:异常 [EclipseLink-0](Eclipse Persistence Services - 2.6.0.v20150309-bf26070):org.eclipse.persistence.exceptions.IntegrityException

描述符异常:

异常 [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)])

异常 [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)

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

描述符异常:

异常 [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)])

异常 [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.exceptions.EntityManagerSetupException.deployFailed(EntityManagerSetupException.java:239)
... 8 more

原因:异常 [EclipseLink-0] (Eclipse Persistence Services - 2.6.0.v20150309-bf26070): org.eclipse.persistence.exceptions.IntegrityException

描述符异常:

异常 [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)])

异常 [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.sessions.DatabaseSessionImpl.initializeDescriptors(DatabaseSessionImpl.java:701) at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.initializeDescriptors(DatabaseSessionImpl.java:637) at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.initializeDescriptors(DatabaseSessionImpl.java:568) at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.postConnectDatasource(DatabaseSessionImpl.java:804) at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:748) at org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:253) at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:728) ... 6 more<code>

【问题讨论】:

    标签: java eclipse postgresql jpa persistence


    【解决方案1】:

    在一种情况下,为了让@Table 正常工作,我还必须添加catalog。另外,我必须在@Entity 中命名该表。试试:

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

    等等

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-22
      • 2021-03-24
      • 2013-04-18
      • 2018-07-25
      • 1970-01-01
      • 2013-07-02
      • 1970-01-01
      相关资源
      最近更新 更多