Hibernate картирование и слияние - PullRequest
0 голосов
/ 22 июня 2011

У меня есть 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.

Я совершенно уверен, что мое отображение неверно, так как я неэксперт, так что я могу изменить, чтобы получить поведение, которое я хочу?

1 Ответ

0 голосов
/ 22 июня 2011

Будет создан новый объект Message, поскольку вы не предоставляете id в своем объекте сообщения sent. При выполнении messageDao.merge(sent) отправленный объект не имеет и id для объединения. Это чисто временный объект. Попробуйте загрузить его из базы данных, как сотрудник.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...