【问题标题】:java.sql.SQLException: ORA-00942: table or view does not exist with JPA entityManager.createQuery()java.sql.SQLException:ORA-00942:表或视图不存在 JPA entityManager.createQuery()
【发布时间】:2017-10-27 09:10:49
【问题描述】:

我正在使用 JPA createquery API 来获取数据。

这是我的查询数据

    @PersistenceContext
    EntityManager entityManager;
    @Override
    public List<String> fetchAllReleaseNumbers() {

        Query query = entityManager.createQuery("SELECT release FROM ReleaseModel", String.class);

        return query.getResultList();
    }

这是我的 pojo 课。

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "dbname.tablenamefromDB")
public class ReleaseModel {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "dbcolumnname", unique = true, nullable = false)
    private String release;

    @Column(name = "dbcolumnname")
    private String releaseDesc;

    @Column(name = "dbcolumnname")
    private Integer releaseStatus;

    @Column(name = "dbcolumnname")
    private Integer releaseMode;


    public String getRelease() {
        return release;
    }

    public void setRelease(String release) {
        this.release = release;
    }

    public String getReleaseDesc() {
        return releaseDesc;
    }

    public void setReleaseDesc(String releaseDesc) {
        this.releaseDesc = releaseDesc;
    }

    public Integer getReleaseStatus() {
        return releaseStatus;
    }

    public void setReleaseStatus(Integer releaseStatus) {
        this.releaseStatus = releaseStatus;
    }

    public Integer getReleaseMode() {
        return releaseMode;
    }

    public void setReleaseMode(Integer releaseMode) {
        this.releaseMode = releaseMode;
    }

}

虽然表存在于 db 中,但它的抛出不存在。任何我犯错误的想法。 我尝试了是否可以为表名赋予任何别名。 我仅将 pojo 类名用于 createQuery。

TIA。

【问题讨论】:

  • 尝试 entityManager.createQuery("SELECT a.release FROM ReleaseModel a", String.class);
  • 尝试将实体名称配置为ReleaseModel并尝试再次执行。
  • @BalajiKrishnan 我已经试过了
  • @PrasadReddy 我没听懂你。你能在这里发帖作为一个 sn-p 以便它会有所帮助
  • 你的意思是这样@Entity(name = "ReleaseModel")

标签: java oracle hibernate jpa


【解决方案1】:

您应该通过这种方式指定架构名称

@Table(schema = "dbname", name = "tablenamefromDB")

您的映射不正确:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "dbcolumnname", unique = true, nullable = false)
private String release;

我认为String 无法自动生成。 此外,您的所有列都有dbcolumnname 名称。

【讨论】:

  • 那么我的 createQuery 会保持不变吗?
  • 既然我用过 dname.dbtablename 这里需要什么架构
  • @Pradeep createQuery 保持不变。请从日志中将带有SELECT 的SQL 添加到问题中。
  • @Ladynev 。我能够解决表存在问题,但 createQuery 返回空列表
  • 结果在 db 中吗?是否需要在同一个 API 中使用其他方法
猜你喜欢
  • 2016-09-18
  • 2019-01-22
  • 2015-11-09
  • 2011-12-10
  • 2015-01-30
  • 2016-08-23
  • 2020-10-16
  • 2018-02-05
相关资源
最近更新 更多