我有2類這樣的:Hibernate映射和合並
消息(ID,標題,內容)
MessageEmployee(ID,郵件ID,僱員,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並保存。
代碼片段:
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);
當我merge(messageEmployee)
,它會創建一個新的message
並在數據庫中的新messageEmployee
,但我不希望它來創建一個新的message
。
我很確定我的映射是錯誤的,因爲我不是專家,所以我可以改變以獲得我想要的行爲?
嘗試在Message類的多對一映射中使用cascade =「none」。 – nIKUNJ
嘗試過,但不起作用。 – l0r3nz4cc10
你可以給一些代碼片段嗎? – nIKUNJ