Hashnate One-to-many HashMap не обновляется на дочернем - PullRequest
3 голосов
/ 01 декабря 2011

У меня есть следующий родительский объект, который отображается в таблицу в моей базе данных:

public Parent {
    private Long id;
    private String mid;
    private Integer days;
    private BigDecimal fee;
    private DateTime createdDate = new DateTime();
    private DateTime lastModifiedDate;

    private Map<String, Child> children;
}

Со следующим .hbm.xml:

    <hibernate-mapping default-access="field">
    <class name="Parent" table="parent_table">
        <id column="id" length="50" name="id" unsaved-value="null">
            <generator class="increment"/>
        </id>
        <property length="50" name="mid"/>
        <property name="days"/>
        <property name="fee"/>
        <property name="createdDate" type="(...)PersistentDateTime"/>
        <property name="lastModifiedDate" type="(...)PersistentDateTime"/>
        <map cascade="all-delete-orphan" inverse="true" name="children" >
            <key column="parentId" />
            <map-key column="country" type="string" />
            <one-to-many class="Child" />
        </map>
    </class>
    </hibernate-mapping>

Дочерний объект выглядит следующим образом:

public class Child implements Serializable {
    private Long parentId;
    private String country;
    private String cu;
}

Со следующим .hbm.xml:

<hibernate-mapping default-access="field">
<class name="Child" table="child_table">
    <composite-id>
        <key-property name="parentId"/>
        <key-property name="country"/>
        <key-property name="cu"/>
    </composite-id>
</class>
</hibernate-mapping>

После получения родительского объекта из моей базы данных через:

getSession().createCriteria(Parent.class)
                            .add(Restrictions.eq("mid", mid))
                            .uniqueResult();

После внесения некоторых изменений в Child.cu в дочернюю карту я вызываю saveOrUpdate для объекта Parent. После этого все выглядит нормально для сохранения / обновления, но после проверки child_table в БД эти изменения не были сохранены / обновлены.

Я полагаю, что это как-то связано с отображениями карты в классе Parent, но, похоже, не могу этого понять. Любая помощь будет оценена.

Заранее спасибо.

1 Ответ

1 голос
/ 01 декабря 2011

Если я правильно понимаю, вы изменяете поле, которое является частью первичного ключа вашей сущности.Это незаконно: удостоверение личности должно быть неизменным.

Мой совет - следовать передовой практике: использовать некомпозитный, чисто технический, автоматически сгенерированный первичный ключ.Все будет намного проще (а также быстрее).

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