Hibernate: Как частично сохранить составные объекты? - PullRequest
1 голос
/ 10 ноября 2011

Представьте, что у вас есть объект Person с отношениями один к одному с объектом Account.При отображении этого в hibernate у вашего класса Person есть свойство Account.

Теперь предположим, что веб-приложение отправляет объекты Person, которые оно хочет обновить, но модуль, который делает это, не заботится о своих вложенных объектах Account (пока) и не может быть обременен отслеживаниемиз них (так как они не особенно легкие и, следовательно, выборка установлена ​​на LAZY).

По этим причинам вы можете установить для свойства «Учетная запись» в «Персоне» значение «Updatable = false», «Вставляемый = false», чтобы при отправке «Лица с нулевой Учетной записью» отношения не удалялись.Пока все хорошо, но что произойдет, если вы не захотите обновлять свойство учетной записи, как бы вы это сделали?Есть ли способ обойти вставляемый / обновляемый?

Спасибо

ОБНОВЛЕНИЕ Добавлен пример кода (Кроме того, я говорил о сущности учетной записи, но затем я начал ссылаться наон как пользователь по какой-то причине исправил это тоже)

 @Entity
@Table(name="person")
public class Person  implements java.io.Serializable
{
    //properties  
    private Integer id;
    private String Name;
    //... this class would have many properties



    /*Most of the time the frontend will send a Person object
      that has this property set to null even if it exists
     because the screen that handles this doesn't manage accounts

      There are other screens that will send that complete person object with
    its account, so the problem is how to save an incomplete person object
    without deleting the relationship
    */

    @OneToOne(fetch=FetchType.EAGER)
    @JoinColumn(name="idAccount", insertable=false, updatable=false)
    public Account getAccount()
    {
        return this.account;
    }

    public void setAccount(Account account)
    {
        this.account = account;
    }
}

@Entity
@Table(name="account")
public class Account implements java.io.Serializable
{
    //properties
    private Integer idAccount;
    //this class has even more properties and nested objects
}

1 Ответ

2 голосов
/ 10 ноября 2011

Добавьте отдельное свойство, для idAccount, Когда вы хотите обновить Person, получите идентификатор учетной записи из базы данных и установите его.

@Column(name="idAccount")
private Integer idAccount;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...