1

ドメインオブジェクトがありますClient。JSPにデータが事前入力されたフォームがあり、修正された値を取り込んでオブジェクトを永続化できます。

Clientと呼ばれる抽象エンティティがありMarketResearch、これはさらに3つの具体的なサブクラスの1つによって拡張されます。

一部のデータを事前入力するフォームがあり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 に答える