私はこのような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
を作成したくない場合は。
私はエキスパートではないので、私のマッピングが間違っていると確信しています。どうすれば私が望む動作を得ることができますか?
Messageクラスの多対1マッピングでcascade = "none"を使用してみてください。 – nIKUNJ
試しましたが動作しません。 – l0r3nz4cc10
いくつかのコードスニペットをお願いしますか? – nIKUNJ