JPA:持久化对象,父级是好的,但是孩子没有更新

时间:2010-03-27 18:49:20

标签: java hibernate jpa object-persistence

我有我的域对象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 个答案:

答案 0 :(得分:3)

您需要在cascade上设置正确的@OneToOne选项才能使您的操作级联:

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