JPA: постоянный объект, родитель в порядке, но потомок не обновлен - PullRequest
1 голос
/ 27 марта 2010

У меня есть мой доменный объект, Client, у меня есть форма на моем JSP, которая предварительно заполнена данными, я могу принять измененные значения и сохранить объект.

Client имеет абстрактную сущность под названием MarketResearch, которая затем расширяется одним из трех более конкретных подклассов.

У меня есть форма для предварительного заполнения некоторых MarketResearch данных, но когда я делаю изменения и пытаюсь сохранить Client, он не сохраняется, может кто-нибудь подсказать мне, куда я ушел не так?

Мои 3 класса доменов следующие (удаленные средства доступа и т. Д.)

public class Client extends NamedEntity
{
    @OneToOne
    @JoinColumn(name = "MARKET_RESEARCH_ID")
    private MarketResearch marketResearch;
    ...
}


@Inheritance(strategy = InheritanceType.JOINED)
public abstract class MarketResearch extends AbstractEntity
{
  ...
}

@Entity(name="MARKETRESEARCHLG")
public class MarketResearchLocalGovernment extends MarketResearch
{

    @Column(name = "CURRENT_HR_SYSTEM")
    private String currentHRSystem;
    ...
}

Вот как я упорствую

public void persistClient(Client client)
{
    if (client.getId() != null)
    {
        getJpaTemplate().merge(client);
        getJpaTemplate().flush();
    } else
    {
        getJpaTemplate().persist(client);
    }
}

Подводя итог, если я что-то изменяю в родительском объекте, он сохраняется, но если я изменяю что-то в дочернем объекте, это не так. Я что-то упустил очевидное?

Я установил точку останова прямо перед вызовами persist / merge, я вижу обновленное значение объекта, но, похоже, оно не сохраняется. Я также проверил на уровне базы данных, не повезло

Спасибо

1 Ответ

3 голосов
/ 27 марта 2010

Вам необходимо установить правильную опцию cascade на @OneToOne, чтобы каскадировать ваши операции:

@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "MARKET_RESEARCH_ID") 
private MarketResearch marketResearch; 
...