2011-06-22 17 views
0

私はこのような2つのクラスがあります。Hibernateのマッピングおよびマージ

メッセージ(ID、タイトル、内容)を

MessageEmployee(ID、messageIdに、EMPLOYEEID、readFlag)このような

と2つのテーブル:

MESSAGE(mess_id、mess_title、mess_content)

MESSAGE_EMPLOYEE(mess_empl_id、mess_id、empl_id、read_fg)

マッピングファイル:

<hibernate-mapping package="core"> 
     <class name="Message" table="MESSAGE"> 
      <!-- class id --> 
      <id name="id" type="int" column="MESS_ID" length="11"> 
       <generator class="native"/> 
      </id> 

      <property name="content" type="string" column="MESS_CONTENT" /> 
      <property name="title" type="string" column="MESS_TITLE" /> 
     </class> 
    </hibernate-mapping> 


    <hibernate-mapping package="core"> 
     <class name="MessageEmployee" table="MESSAGE_EMPLOYEE"> 
      <!-- class id --> 
      <id name="id" type="int" column="MESS_EMPL_ID" length="11"> 
       <generator class="native"/> 
      </id> 

      <!-- employee --> 
      <many-to-one name="employee" class="core.Employee" 
       column="EMPL_ID" cascade="save-update,merge" lazy="false" /> 

      <!-- message --> 
      <many-to-one name="message" class="core.Message" 
       column="MESS_ID" cascade="save-update,merge" lazy="false" /> 

      <property name="readFlag" type="character" column="READ_FG" />  
     </class> 
    </hibernate-mapping> 

ここに私の問題です: のは、私はすでにデータベース内のメッセージを持っている、と私はmessageEmployeeを作成し、それを保存したいとしましょう。

コードスニペット:I merge(messageEmployee)

Message sent = new Message(content, title); 
    Employee e = employeeDao.loadEmployeeWithId(Integer.valueOf(to)); 

    messageDao.merge(sent) 

    MessageEmployee m = new MessageEmployee(sent, e, null); 
    m.setReadFlag('N'); 
    messageEmployeeDao.mergeMessageEmploye(m); 

、それはデータベースに新しいmessageと新しいmessageEmployeeを作成しますが、私はそれが新しいmessageを作成したくない場合は。

私はエキスパートではないので、私のマッピングが間違っていると確信しています。どうすれば私が望む動作を得ることができますか?

+0

Messageクラスの多対1マッピングでcascade = "none"を使用してみてください。 – nIKUNJ

+0

試しましたが動作しません。 – l0r3nz4cc10

+0

いくつかのコードスニペットをお願いしますか? – nIKUNJ

答えて

0

メッセージオブジェクトsentidを指定していないため、新しいオブジェクトが作成されます。 messageDao.merge(sent)を実行すると、送信されたオブジェクトにはidがマージされません。それは純粋な一時オブジェクトです。 Employeeのようなデータベースからロードしてみてください。

+0

ありがとう! idを取得するために 'sent = messageDao.merge(sent);'を追加しました。 – l0r3nz4cc10

関連する問題