簡體   English   中英

Hibernate SQL生成后,表或視圖不存在

[英]Table or view doesn't exist after Hibernate SQL generation

我當前的Hibernate項目遇到一些映射問題。 但首先,我要告訴我我正在使用:

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

我必須說,所有映射類都是由Hibernate反向工程向導使用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(expExpediente)組成 這就是我的問題所在。 閱讀Hibernate生成的sql后,我發現當Hibernate嘗試執行下一個句子時,出現ORA-00942:表或視圖不存在錯誤:

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

我認為該錯誤與表EXP_EXPEDIENTES_EXP_INSTRUC有關,該表顯然在數據庫中不存在。 實際上,正如我已經說過的那樣,映射是從數據庫生成的。

現在,我的問題是:我應該創建該表嗎? 還是所有這些問題是由於配置錯誤引起的? 我真的不知道該怎么辦,因此我們將不勝感激。

您的映射應如下所示:

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

的雙向關系,雙方應通過連接mappedBy的屬性@OneToMany側,否則你會之間有兩個單向關系ExpExpedientesExpInstrucciones ,其中一人使用外鍵和另外一個實施-使用連接表(默認)。

我猜這是“ 休眠反向工程向導”的錯誤,您也應該檢查此問題的其他關系。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM