【问题标题】:JPA can't find tableJPA 找不到表
【发布时间】:2014-08-29 17:07:35
【问题描述】:

我正在使用 JPA 2.0、Eclipselink 2.0、maven 和 weblogic 10.3.6。这是我的 persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" 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 http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="certifications" transaction-type="JTA">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <jta-data-source>jdbc/com/ni/ds_edata_soa_nontx</jta-data-source>
        <class>com.ni.apps.engineering.certification.entities.NicdsCliCertificationStg</class>
        <class>com.ni.apps.engineering.certification.entities.NicdsCliCertificationStgPK</class>
        <class>com.ni.apps.engineering.certification.entities.NicdsCliUpMapping</class>   
        <properties>                        
            <property name="javax.persistence.jdbc.password" value="ni"/>
            <property name="javax.persistence.jdbc.user" value="NI"/>
            <property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver"/>
            <property name="eclipselink.logging.level.sql" value="FINE"/>       
        </properties>       
    </persistence-unit>
</persistence>

这是我的门面

    package com.ni.apps.engineering.certification.controller;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.PersistenceUnit;
import javax.persistence.TypedQuery;
import com.ni.apps.engineering.certification.entities.NicdsCliCertificationStg;
import com.ni.apps.engineering.certification.exception.CertificationException;
import com.ni.apps.engineering.certification.utils.CertificationConstants;

public class CertificationFacade {  

    @PersistenceUnit(unitName = "certifications")
    private EntityManagerFactory emf;

    public List<NicdsCliCertificationStg> getCertificationsByUpId(String upId)
            throws CertificationException {
        String stringQuery = new StringBuilder(
                "select c from NicdsCliCertificationStg c where c.id.contactsId = 1234").toString();
                //.append(upId).toString();
        try {
            emf = Persistence.createEntityManagerFactory("certifications");     
            EntityManager em = emf.createEntityManager();
            TypedQuery<NicdsCliCertificationStg> query = em
                    .createQuery(stringQuery, NicdsCliCertificationStg.class);
            return query.getResultList();
        } catch (Exception e) {
            throw new CertificationException(
                    CertificationConstants.INTERNAL_ERROR_MESSAGE, e);
        }
    }
}

当我尝试运行应用程序时,这是我遇到的错误

Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.1.v20111018-r10243): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: ORA-00942: table or view does not exist

Error Code: 942
Call: SELECT CONTACTS_ID, PROFILE_ID FROM NI.NICDS_CLI_UP_MAPPING WHERE (PROFILE_ID = ?)
    bind => [1 parameter bound]
Query: ReadAllQuery(referenceClass=NicdsCliUpMapping sql="SELECT CONTACTS_ID, PROFILE_ID FROM NI.NICDS_CLI_UP_MAPPING WHERE (PROFILE_ID = ?)")

任何想法为什么它找不到表?

-编辑- 添加实体

package com.ni.apps.engineering.certification.entities;

import java.io.Serializable;
import javax.persistence.*;
import java.util.Date;


/**
 * The persistent class for the NICDS_CLI_CERTIFICATION_STG database table.
 * 
 */
@Entity
@Table(name="NICDS_CLI_CERTIFICATION_STG", schema="NI")
public class NicdsCliCertificationStg implements Serializable {
    private static final long serialVersionUID = 1L;

    @EmbeddedId
    private NicdsCliCertificationStgPK id;

    @Column(name="ALTERNATE_EMAIL")
    private String alternateEmail;

    @Temporal(TemporalType.DATE)
    @Column(name="CERT_EXPIRATION_DATE")
    private Date certExpirationDate;

    @Temporal(TemporalType.DATE)
    @Column(name="CERT_ISSUE_DATE")
    private Date certIssueDate;

    @Column(name="CERT_STATUS")
    private String certStatus;

    @Column(name="FIRST_NAME")
    private String firstName;

    @Column(name="LAST_NAME")
    private String lastName;

    @Column(name="PRIMARY_EMAIL")
    private String primaryEmail;

    //bi-directional one-to-one association to NicdsCliUpMapping
    @OneToOne
    @JoinColumn(name="CONTACTS_ID")
    private NicdsCliUpMapping nicdsCliUpMapping;

    public NicdsCliCertificationStg() {
    }

    public NicdsCliCertificationStgPK getId() {
        return this.id;
    }

    public void setId(NicdsCliCertificationStgPK id) {
        this.id = id;
    }

    public String getAlternateEmail() {
        return this.alternateEmail;
    }

    public void setAlternateEmail(String alternateEmail) {
        this.alternateEmail = alternateEmail;
    }

    public Date getCertExpirationDate() {
        return this.certExpirationDate;
    }

    public void setCertExpirationDate(Date certExpirationDate) {
        this.certExpirationDate = certExpirationDate;
    }

    public Date getCertIssueDate() {
        return this.certIssueDate;
    }

    public void setCertIssueDate(Date certIssueDate) {
        this.certIssueDate = certIssueDate;
    }

    public String getCertStatus() {
        return this.certStatus;
    }

    public void setCertStatus(String certStatus) {
        this.certStatus = certStatus;
    }

    public String getFirstName() {
        return this.firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return this.lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getPrimaryEmail() {
        return this.primaryEmail;
    }

    public void setPrimaryEmail(String primaryEmail) {
        this.primaryEmail = primaryEmail;
    }

    public NicdsCliUpMapping getNicdsCliUpMapping() {
        return this.nicdsCliUpMapping;
    }

    public void setNicdsCliUpMapping(NicdsCliUpMapping nicdsCliUpMapping) {
        this.nicdsCliUpMapping = nicdsCliUpMapping;
    }


}

package com.ni.apps.engineering.certification.entities;

import java.io.Serializable;
import javax.persistence.*;

/**
 * The primary key class for the NICDS_CLI_CERTIFICATION_STG database table.
 * 
 */
@Embeddable
public class NicdsCliCertificationStgPK implements Serializable {
    //default serial version id, required for serializable classes.
    private static final long serialVersionUID = 1L;

    @Column(name="CONTACTS_ID")
    private long contactsId;

    @Column(name="CERT_NAME")
    private String certName;

    public NicdsCliCertificationStgPK() {
    }
    public long getContactsId() {
        return this.contactsId;
    }
    public void setContactsId(long contactsId) {
        this.contactsId = contactsId;
    }
    public String getCertName() {
        return this.certName;
    }
    public void setCertName(String certName) {
        this.certName = certName;
    }

    public boolean equals(Object other) {
        if (this == other) {
            return true;
        }
        if (!(other instanceof NicdsCliCertificationStgPK)) {
            return false;
        }
        NicdsCliCertificationStgPK castOther = (NicdsCliCertificationStgPK)other;
        return 
            (this.contactsId == castOther.contactsId)
            && this.certName.equals(castOther.certName);
    }

    public int hashCode() {
        final int prime = 31;
        int hash = 17;
        hash = hash * prime + ((int) (this.contactsId ^ (this.contactsId >>> 32)));
        hash = hash * prime + this.certName.hashCode();

        return hash;
    }
}

package com.ni.apps.engineering.certification.entities;

import java.io.Serializable;
import javax.persistence.*;
import java.math.BigDecimal;


/**
 * The persistent class for the NICDS_CLI_UP_MAPPING database table.
 * 
 */
@Entity
@Table(name="NICDS_CLI_UP_MAPPING", schema="NI")
public class NicdsCliUpMapping implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @SequenceGenerator(name="NICDS_CLI_UP_MAPPING_CONTACTSID_GENERATOR" )
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="NICDS_CLI_UP_MAPPING_CONTACTSID_GENERATOR")
    @Column(name="CONTACTS_ID")
    private long contactsId;

    @Column(name="PROFILE_ID")
    private BigDecimal profileId;

    //bi-directional one-to-one association to NicdsCliCertificationStg
    @OneToOne(mappedBy="nicdsCliUpMapping")
    private NicdsCliCertificationStg nicdsCliCertificationStg;

    public NicdsCliUpMapping() {
    }

    public long getContactsId() {
        return this.contactsId;
    }

    public void setContactsId(long contactsId) {
        this.contactsId = contactsId;
    }

    public BigDecimal getProfileId() {
        return this.profileId;
    }

    public void setProfileId(BigDecimal profileId) {
        this.profileId = profileId;
    }

    public NicdsCliCertificationStg getNicdsCliCertificationStg() {
        return this.nicdsCliCertificationStg;
    }

    public void setNicdsCliCertificationStg(NicdsCliCertificationStg nicdsCliCertificationStg) {
        this.nicdsCliCertificationStg = nicdsCliCertificationStg;
    }


}

【问题讨论】:

  • 您是否尝试使用 psql 进行查询? (或任何支持 Oracle 的 SQL 客户端)。这可能是各种错误,例如无效的数据库、架构、用户,甚至更糟:表是用某种情况声明的,而 Oracle 期望这种情况。
  • 是的,我运行了查询,只是我替换了 ?这显示在 5678 参数的错误中,它工作得很好。
  • 如何定义实体?您是否覆盖了默认表名?
  • 实体是eclipse自动生成的。我会在这里发布代码。
  • 表不存在错误意味着您登录数据库的用户看不到该表。检查您是如何创建 ds_edata_soa_nontx 数据源的,并且它使用与您在 psql 中使用的相同凭据来验证表是否存在

标签: java jpa eclipselink


【解决方案1】:

如果您使用不同的用户进行测试,那么数据源中配置的用户

在数据源连接池配置中,进入高级部分

在“Init SQL”部分输入这个(见指令前的 SQL 字,需要)

SQL ALTER SESSION SET CURRENT_SCHEMA=DEVLPMT

http://docs.oracle.com/middleware/1212/wls/JDBCA/jdbc_datasources.htm#CJAFCBBD

【讨论】:

    【解决方案2】:

    错误在于 weblogic 的数据源的用户和密码组合与我对应用程序架构所需的组合不同。如果我找到一种方法来强制 JPA 使用特定架构/用户/密码组合而不更改数据源中的用户,我将更新此答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-20
      • 1970-01-01
      • 2017-12-05
      • 1970-01-01
      • 1970-01-01
      • 2016-10-10
      相关资源
      最近更新 更多