【问题标题】:Table or view doesn't exist after Hibernate SQL generationHibernate SQL 生成后表或视图不存在
【发布时间】:2012-08-28 10:57:30
【问题描述】:

我当前的 Hibernate 项目存在一些映射问题。但首先,我会告诉我我正在使用:

NetBeans 7.1.1
Java
JSF2
Oracle 10g
Apache Tomcat 7.0.22
Hibernate 3.2.1

我不得不说所有的映射类都是由Hibernate Reverse Engeneering Wizard使用Annotations生成的,我的意思是,这些类是从数据库中的表构建的.我可以正常运行程序,除了关于在 OneToMany 关系中插入的部分,这个:

大师

  @Entity
  @Table(name = "EXP_EXPEDIENTES")
  public class ExpExpedientes implements Serializable {

  @Id
  @SequenceGenerator(name = "seq", sequenceName = "EXP_SEQ") //Triggers are disabled so Hibernate can manage the sequence generation.
  @GeneratedValue(generator = "seq")
  @Column(name = "ID_EXP")
  private long idExpediente;

  @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
  private Set<ExpInstrucciones> expInstrucciones;    

  //more fields
  //getters & setters

详情

  @Entity
  @Table(name = "EXP_INSTRUC")
  public class ExpInstrucciones implements Serializable {

  @Id
  @SequenceGenerator(name="seq",sequenceName="EXP_SEQ")
  @GeneratedValue(generator="seq")
  @Column(name = "ID_INS")
  private long idInstruccion;

  @ManyToOne(fetch=FetchType.LAZY)
  @JoinColumn(name="ID_EXP", nullable=false)
  private ExpExpedientes expExpedientes;

  //more fields
  //getters & setters

这样,我可以创建一个 ExpExpediente 对象和几个 ExpInstrucciones 对象。在分配一些值并尝试保存它们之前,我会这样做:

  /* Previously, I've created these objects:
   * expInst_1 = new ExpInstruccines();
   * expInst_2 = new ExpInstrucciones();
   */ 

  expInst_1.setExpExpedientes(expExpediente);           
  expInst_2.setExpExpedientes(expExpediente);

  expExpediente.getExpInstrucciones().add(expInst_1);
  expExpediente.getExpInstrucciones().add(expInst_2);

  ExpedienteDAO.save(expExpediente);

DAO 类中的save 方法只包含在session.save(expediente) 上。这就是我的问题所在。阅读Hibernate生成的sql,发现Hibernate尝试执行下一句时出现ORA-00942: table or view doesn't exist错误:

  insert 
  into
      EXP_EXPEDIENTES_EXP_INSTRUC
      (EXP_EXPEDIENTES_ID_EXP, expInstrucciones_ID_INS) 
  values
      (?, ?)

我认为错误与表EXP_EXPEDIENTES_EXP_INSTRUC有关,该表显然在数据库中不存在。事实上,正如我已经说过的,映射是从数据库生成的。

现在,我的问题是:我应该创建那个表吗?或者所有这些问题都是由于配置错误问题造成的?我真的不知道该怎么办,所以任何帮助将不胜感激。

【问题讨论】:

    标签: java oracle hibernate


    【解决方案1】:

    您的映射应如下所示:

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, 
       mappedBy = "expExpedientes")   
    private Set<ExpInstrucciones> expInstrucciones;     
    

    双向关系的双方应使用@OneToMany 一侧的mappedBy 属性连接,否则ExpExpedientesExpInstrucciones 之间将有两个单向关系,其中一个使用外键实现,另一个使用外键实现连接表(默认)。

    我猜是Hibernate Reverse Engineering Wizard的错误,你也应该检查其他关系是否存在这个问题。

    【讨论】:

    • 非常感谢。这样可行。我在关系的另一端尝试了mappedByattribute,但没有结果。再次感谢。
    猜你喜欢
    • 2014-05-16
    • 1970-01-01
    • 2015-01-31
    • 1970-01-01
    • 1970-01-01
    • 2015-08-06
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    相关资源
    最近更新 更多