【发布时间】:2011-06-22 10:06:42
【问题描述】:
我有 2 个这样的课程:
消息(id、标题、内容)
MessageEmployee(id, messageId, employeeId, readFlag)
还有两个这样的表:
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 并保存它。
代码 sn-p:
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"。
-
试过了,还是不行。
-
你能给我一些代码sn-p吗?
标签: database hibernate hibernate-mapping