1

我有我的域对象,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);
    }
}

总而言之,如果我更改父对象上的某些内容,它会持续存在,但如果我更改子对象上的某些内容,则不会。我错过了什么明显的东西吗?

我在持久/合并调用之前放置了一个断点,我可以看到对象上的更新值,但它似乎没有保存。我也在数据库级别检查过,没有运气

谢谢

4

1 回答 1

3

您需要设置适当的cascade选项@OneToOne以使您的操作级联:

@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "MARKET_RESEARCH_ID") 
private MarketResearch marketResearch; 
于 2010-03-27T19:03:52.803 回答