我有我的域对象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调用之前放了一个断点,我可以在对象上看到更新的值,但它似乎没有保存。我也在数据库级别检查过,没有运气
由于
答案 0 :(得分:3)
您需要在cascade
上设置正确的@OneToOne
选项才能使您的操作级联:
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "MARKET_RESEARCH_ID")
private MarketResearch marketResearch;