0

私の現在のHibernateプロジェクトには、いくつかのマッピングの問題があります。しかし、まず最初に、私が使用していることを伝えます:

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

すべてのマッピングクラスは、アノテーションを使用してHibernate Reverse Engeneering Wizardによって生成されたと言わざるを得ません。つまり、クラスはデータベースのテーブルから構築されました。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に関連していると思います。実際、すでに述べたように、マッピングはデータベースから生成されました。

そして今、私の質問:私はそのテーブルを作成することになっていますか?または、この問題はすべて、設定ミスの問題が原因ですか?どうしたらいいのかわからないので、助けていただければ幸いです。

4

1 に答える 1

1

マッピングは次のようになります。

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

双方向関係の側面は、側面のmappedBy属性を使用して接続する必要が@OneToManyあります。そうしないと、との間に2つの単方向関係がExpExpedientesありExpInstrucciones、1つは外部キーを使用して実装され、もう1つは結合テーブルを使用して実装されます(デフォルト)。

これはHibernateReverseEngeneering Wizardのエラーだと思います。この問題については、他の関係も確認する必要があります。

于 2012-08-28T11:56:10.830 に答える