1

休止状態とJPAでSpring MVCを使用しています。Agentという別のクラスに継承される Person クラスがあります。マッピングは次のように実装されます。

@Entity
@Table(name = "Person")
@Inheritance(strategy = InheritanceType.JOINED)
public class Person extends Auditable implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "PersonId")
    protected Long id;

    //other variables
    ...
}


@Entity
@PrimaryKeyJoinColumn(name = "PersonId")
public class Agent extends Person implements Serializable {
    //additional agent specific variables go here 
    ...
}

新しいデータの保存はスムーズで、問題はありません。ただし、データを編集すると、id 値を除くすべてがコントローラー メソッドのモデル属性にバインドされます。Chrome の開発者ツールを使用して、ブラウザから id が他のアイテムと一緒に送信されたことを確認しました。ただし、コントローラーの id フィールドは常に null であるため、データは更新されません。これは私のコントローラーメソッドがどのように見えるかです:

@RequestMapping(value = "register", method = RequestMethod.POST)
public @ResponseBody CustomAjaxResponse saveAgent(ModelMap model, @ModelAttribute("agent") @Valid Agent agent, BindingResult result) {
    ...
}

Personクラスから継承する他のクラスがあり、そこでも同様の問題に直面しているため、おそらく継承マッピングに問題があると思われます。

助けてください!

4

1 に答える 1

2

IDのパブリックセッターが必要です。

このような場合、私は通常、フォームに特定の dto を使用するか、id に基づいて休止状態を介してエンティティを取得し、マージを実行する変換サービスを実装します。

于 2013-03-28T13:32:14.117 に答える