2016-05-11 7 views
0

私はPerseusプロジェクト(Open Source Code)のソースコードをUbuntu 14.04とTomcat 6にダウンロードしてインストールしました。プロジェクトは何年もの間修正されていないので、これを行うハイバーネーションの新機能でなければなりません。大規模なプロジェクトで「オブジェクト参照を保存していない一時インスタンスを修正する - フラッシュする前に一時インスタンスを保存する」はどうすればできますか?

ここでは非常に多くのスレッドで解決策を見ていますが、「一度に」機能していたプロジェクトを移行するのではなく、デバッグコードの問題に対処しています。私が使っているコードは、2008年から2011年にかけて修正されていません。 (私は彼らが今 "Mandriva Linux 2010.2"でそれを実行していると判断しました)したがって、この問題を検索/置換メソッドか設定ファイルの変更のいずれかで大規模に修正できる必要があります。私は自分自身で休止状態を使用していないので、投稿された回答の完全な意味を理解していません。

ありがとうございました。

また、ファイルでは@アノテーション付きの構文は使用されませんが、マッピングはXMLファイルで行われているようです。この時点で、何を変更すべきか分かっていれば、これらのファイルをすべて更新するだけでよいでしょう。

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
     "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping package="perseus.document.dao"> 
    <class name="HibernateChunkDAO$ChunkRow" table="hib_chunks" batch-size="10"> 

    <id name="id" type="int" column="id" unsaved-value="null"> 
     <generator class="native" /> 
    </id> 

    <property name="documentID" column="document_id" type="string" 
     length="50" index="doc_idx doc_type_idx doc_type_value_idx 
     doc_cid_idx doc_so_eo_idx doc_so_eo_type_idx doc_dq_idx 
     doc_so_eo_type_val_idx" /> 

    <property name="elementName" column="element" type="string" 
     length="20" /> 
    <property name="type" column="type" type="string" length="30" 
     index="doc_type_idx doc_type_value_idx doc_so_eo_type_idx 
     doc_so_eo_type_val_idx" /> 
    <property name="value" column="value" type="string" length="250" 
     index="doc_type_value_idx doc_so_eo_type_val_idx" /> 

    <property name="position" column="position" type="int" /> 
    <property name="absolutePosition" column="abs_position" type="int" /> 

    <property name="chunkID" column="chunk_id" type="string" 
     length="255" index="doc_cid_idx" /> 

    <property name="openTags" column="open_tags" type="text" /> 
    <property name="closeTags" column="close_tags" type="text" /> 

    <property name="startOffset" column="start_offset" type="int" 
     index="doc_so_eo_idx doc_so_eo_type_idx doc_so_eo_type_val_idx" /> 
    <property name="endOffset" column="end_offset" type="int" 
     index="doc_so_eo_idx doc_so_eo_type_idx doc_so_eo_type_val_idx" /> 

    <property name="displayQuery" column="display_query" type="string" 
     length="100" index="doc_dq_idx" /> 
    <property name="head" column="head" type="text" /> 
    <property name="headLanguage" column="head_lang" type="string" 
     length="10" /> 
    <property name="hasCustomHead" column="custom_head" type="boolean" /> 

     <set name="frequencies" inverse="true" cascade="all-delete-orphan" 
      lazy="true" batch-size="30"> 
      <key column="chunk_id" on-delete="cascade" /> 
      <one-to-many class="perseus.ie.freq.Frequency" /> 
     </set> 

     <many-to-one name="lemma" column="lemma_id" cascade="all" lazy="false" /> 

     <!-- 
     <list name="senses" inverse="false" cascade="all-delete-orphan" 
      lazy="false" batch-size="30"> 
      <key column="chunk_id" /> 
      <list-index column="position" /> 
      <one-to-many class="perseus.voting.Sense" /> 
     </list> 
--> 
    </class> 
</hibernate-mapping> 

答えて

1

これが原因理由以下に起こっている:

あなたはまだデータベースに永続化されておらず、この関連付けを永続化する前に、あなたはSession.Forをフラッシュしようとしているエンティティでの関連付けを定義していますたとえば、一時的なインスタンスのコレクションを持つコレクションアソシエーションがあるため、フラッシングの前にこのコレクションを最初に保持する必要があります。この問題を解決するための

、あなたは、2つのオプションがあります:

  1. 手動Session.save()メソッドを呼び出すことによって、あなたのコード内でコレクションを持続します。

  2. タグをHibernate XMLファイルで使用する場合、またはアノテーションを使用する場合は、コレクション関連でcascade = "all"(xml)またはcascade = CascadeType.ALL(注釈)を使用します。

+0

私は上記のXML定義ファイルを更新しました。私はカスケード= CascadeType.ALLを追加する必要がある場所を指摘できますか? – user1122069

関連する問題

 関連する問題