У меня есть 2 класса, как это:
Сообщение (идентификатор, заголовок, содержимое)
MessageEmployee (идентификатор, messageId, employeeId, readFlag)
и 2 таблицы, напримерthis:
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
.
Я совершенно уверен, что мое отображение неверно, так как я неэксперт, так что я могу изменить, чтобы получить поведение, которое я хочу?