【问题标题】:JPA Error: Entity class has no primary key specifiedJPA 错误:实体类没有指定主键
【发布时间】:2021-10-06 05:24:48
【问题描述】:

我有一个实体类,jpa 抛出一个验证异常,说明指定了主键。我不知道为什么。

请查看以下详细信息: * 内部异常:javax.persistence.PersistenceException:异常 [EclipseLink-28018](Eclipse 持久性服务 - 2.4.2.v20130514-5956486):org.eclipse.persistence.exceptions.EntityManagerSetupException 异常描述:PersistenceUnit [默认] 的预部署失败。 内部异常:异常 [EclipseLink-7161] (Eclipse Persistence Services - 2.4.2.v20130514-5956486): org.eclipse.persistence.exceptions.ValidationException 异常描述:实体类 [class A] 没有指定主键。它应该定义@Id、@EmbeddedId 或@IdClass。如果您使用这些注释中的任何一个定义了 PK,请确保您的实体类层次结构中没有混合访问类型(已注释的字段和属性)。*

实体类A:

@Access(AccessType.FIELD)
@Entity
@Cache(disableHits=true)
@Table(name="VT_INVALID_USERS")
public class A extends BharosaBaseBean implements java.io.Serializable {
    @SequenceGenerator(name="USERS_SEQ", allocationSize=1)
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO, generator="USERS_SEQ")
    @Column(name="USER_ID")
    protected Long userId;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name="CREATE_TIME")
    protected Date createTime = new Date();

    public void setUserId( Long userId ) {
        this.userId = userId;
    }

    public Long getUserId( ) {
        return this.userId;
    }
}

BharosaBaseBean 类:

public abstract class BharosaBaseBean implements java.io.Serializable {
    abstract public Long getPKId();
}

我拥有的持久化文件:

<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence persistence_1_0.xsd" version="1.0">
    <persistence-unit name="default" transaction-type="RESOURCE_LOCAL">
        <provider>
            org.eclipse.persistence.jpa.PersistenceProvider
        </provider>
        <mapping-file>orm.xml</mapping-file>
        <properties>
            <property name="eclipselink.logging.level" value="FINE"/>
            <property name="javax.persistence.jdbc.driver" value="oracle.jdbc.driver.OracleDriver"/>
            <property name="javax.persistence.jdbc.url" value=" <url>"/>
            <property name="javax.persistence.jdbc.user" value="<user>"/>
            <property name="javax.persistence.jdbc.password" value="<pwd>"/>
            <property name="eclipselink.jdbc.read-connections.max" value="5"/>
            <property name="eclipselink.jdbc.read-connections.min" value="5"/>
            <property name="eclipselink.jdbc.write-connections.max" value="10"/>
            <property name="eclipselink.jdbc.wirte-connections.min" value="10"/>
            <property name="eclipselink.session.customizer" value="oracle.security.uas.core.common.toplink.SessionCustomizerForCLIRetryLogic"/>
            <property name="oaam.eclipselink.conn.health.validated.on.error" value="true"/>
            <property name="oaam.eclipselink.query.retry.attempt.count" value="3"/>
            <property name="oaam.eclipselink.delay.between.reconnect.attempts" value="5000"/>
            <property name="oaam.eclipselink.ping.sql" value="select 1 from dual"/>
        </properties>
    </persistence-unit>
</persistence>

【问题讨论】:

  • 打开 EclipseLink 日志并将其设置为全部或最好 - 它应该在部署持久性单元时记录所有内容,并在引发异常之前显示它为“A”实体找到的内容。我猜你在类路径上有一个不同的 A 类,它可能不完整(可能是旧版本),这导致了异常。

标签: java jpa persistence eclipselink


【解决方案1】:

也许您可以尝试将基类添加到 persistence.xml 文件中。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-19
  • 2017-04-13
  • 2012-05-06
  • 1970-01-01
  • 2018-10-28
  • 2023-02-09
  • 1970-01-01
相关资源
最近更新 更多