问题
I have my domain object, Client
, I've got a form on my JSP that is pre-populated with its data, I can take in amended values, and persist the object.
Client
has an abstract entity called MarketResearch
, which is then extended by one of three more concrete sub-classes.
I have a form to pre-populate some MarketResearch
data, but when I make changes and try to persist the Client
, it doesn't get saved, can someone give me some pointers on where I've gone wrong?
My 3 domain classes are as follows (removed accessors etc)
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;
...
}
This is how I'm persisting
public void persistClient(Client client)
{
if (client.getId() != null)
{
getJpaTemplate().merge(client);
getJpaTemplate().flush();
} else
{
getJpaTemplate().persist(client);
}
}
To summarize, if I change something on the parent object, it persists, but if I change something on the child object it doesn't. Have I missed something blatantly obvious?
I've put a breakpoint right before the persist/merge calls, I can see the updated value on the object, but it doesn't seem to save. I've checked at database level as well, no luck
Thanks
回答1:
You need to set a proper cascade
option on @OneToOne
in order to get your operations cascaded:
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "MARKET_RESEARCH_ID")
private MarketResearch marketResearch;
来源:https://stackoverflow.com/questions/2530498/jpa-persisting-object-parent-is-ok-but-child-not-updated